传送门

蒟蒻并不懂A*是什么,但是题解里有个Astar

可以看出,当前棋盘和最终的棋盘如果有k个不同的,那么至少需要k-1步来移动

所以如果 当前步数 + k - 1 > limit 就直接退出

然后当然就是用喜闻乐见的迭代加深搜索啦,广搜占空间那么大又难写

最后吐槽一句,为什么我加哈希判重反而比不判重慢。。?

#include <cstdio>
#define swap(x, y) ((x) ^= (y) ^= (x) ^= (y))
#define P 1000007int T, limit;
char s[6][6], t[6][6];
int dx[8] = {-1, -2, -2, -1, 1, 2, 2, 1},dy[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
bool vis[P];inline bool dfs(int k)
{int i, j, sx, sy, x, y, cnt = 0, hash = 0;for(i = 1; i <= 5; i++)for(j = 1; j <= 5; j++){hash = (hash * 17 + s[i][j]) % P;cnt += (s[i][j] != t[i][j]);if(s[i][j] == '*')sx = i, sy = j;}if(!cnt) return 1;cnt--;if(k > limit) return 0;if(vis[hash]) return 0;if(k + cnt - 1 > limit) return 0;for(i = 0; i < 8; i++){x = sx + dx[i];y = sy + dy[i];if(1 <= x && x <= 5 && 1 <= y && y <= 5){swap(s[sx][sy], s[x][y]);if(dfs(k + 1)) return 1;swap(s[sx][sy], s[x][y]);}}return 0;
}int main()
{int i, j;scanf("%d", &T);t[1][1] = '1', t[1][2] = '1', t[1][3] = '1', t[1][4] = '1', t[1][5] = '1';t[2][1] = '0', t[2][2] = '1', t[2][3] = '1', t[2][4] = '1', t[2][5] = '1';t[3][1] = '0', t[3][2] = '0', t[3][3] = '*', t[3][4] = '1', t[3][5] = '1';t[4][1] = '0', t[4][2] = '0', t[4][3] = '0', t[4][4] = '0', t[4][5] = '1';t[5][1] = '0', t[5][2] = '0', t[5][3] = '0', t[5][4] = '0', t[5][5] = '0';vis[151603] = 1;while(T--){limit = 0;for(i = 1; i <= 5; i++)scanf("%s", s[i] + 1);while(limit <= 15){if(dfs(1)){printf("%d\n", limit);break;}limit++;}if(limit > 15) puts("-1");}return 0;
}

  

转载于:https://www.cnblogs.com/zhenghaotian/p/7641676.html

[luoguP2324] [SCOI2005]骑士精神(A*?)相关推荐

  1. luoguP2324 [SCOI2005]骑士精神 IDA*

    题面 这个题比较简单 直接枚举搜索深度 估价函数为当前棋盘与目标棋盘不同的棋的个数 然后直接迭代加深搜索就可以了 当然还不能走回头路 Codes #include<bits/stdc++.h&g ...

  2. 洛谷 P2324 [SCOI2005]骑士精神 解题报告

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  3. BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2838  Solved: 1663 [Submit][St ...

  4. bzoj 1085: [SCOI2005]骑士精神(IDA*)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2296  Solved: 1328 [Submit][St ...

  5. bzoj1085: [SCOI2005]骑士精神(a*)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2555  Solved: 1472 [Submit][St ...

  6. [启发式搜索/A*] [SCOI2005]骑士精神题解

    洛谷-骑士精神 启发式搜索-A* 估价函数 对于当前状态,我们可以将其与目标状态对比,得到一个预估的代价,即最少(不一定满足题意)的代价,得到这个代价的函数叫做估价函数 对于一个最短路问题来说,我们可 ...

  7. BZOJ1085 [SCOI2005] 骑士精神

    [问题描述] 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相 ...

  8. 【题解】P2324[SCOI2005] 骑士精神

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位. 在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为 ...

  9. [A*,启发式搜索] [SCOI2005] 骑士精神

    链接:https://ac.nowcoder.com/acm/problem/20247 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

最新文章

  1. 一文清晰讲解机器学习中梯度下降算法(包括其变式算法)
  2. PHP学习笔记-字符串操作1
  3. MySQL中优化sql语句查询常用的30种方法
  4. C十六: 两个指针相减
  5. AngularJS:在Windows上安装Yeoman
  6. 【深度学习】深度学习中的单元测试
  7. BugkuCTF-WEB题cookie欺骗
  8. Android性能优化之内存篇
  9. ubuntu18常用软件安装设置
  10. 需求文档2_The Battle of Polytopia
  11. inode客户端连接成功上不了网_iNode智能客户端常见问题及解决办法
  12. urllib库(三)parse模块:quote()/quote_plus(),unquote()/unquote_plus(),quote_from_bytes()
  13. Java jmeter集成测试
  14. 主动学习与自监督学习结合的方法(Active Learning+Self-Supervision)
  15. 用Java语句判断一个数字是不是7的倍数
  16. Android Studio 3.0 正式版本 发行说明 (翻译)
  17. C语言中图形函数及其用法
  18. python学习笔记--虫师
  19. 主键和唯一性索引的区别
  20. 台式机和工作站到底有什么区别?

热门文章

  1. SandyMandy ,绝世好BABY http://angel.mingox.com
  2. 微软开源计算机视觉专题库,含分类、检测、分割、关键点、跟踪、动作识别等主流方向...
  3. 人脸年龄编辑:无可奈何花落去,似曾相似春又来!
  4. 干货!Kaggle座头鲸识别落下帷幕,冠军方案解读
  5. 2021年,作为算法工程师的你们会在CV业务上用Transformer吗?
  6. 计算机视觉论文-2021-06-11
  7. 谷歌、DeepMind提出高效Transformer评估基准
  8. 【TensorFlow系列一】TensorFlow工作原理
  9. 面向小姐姐的编程——java面相对象之抽象
  10. 推荐系统遇上深度学习(十七)--探秘阿里之MLR算法浅析及实现