题面

这个题比较简单 直接枚举搜索深度

估价函数为当前棋盘与目标棋盘不同的棋的个数

然后直接迭代加深搜索就可以了

当然还不能走回头路

Codes

#include<bits/stdc++.h>using namespace std;const int N = 10;
char a[N][N], c[N][N];
int fx[8][2] = {{1, 2}, {1, -2}, {2, -1}, {2, 1}, {-2, -1}, {-2, 1}, {-1, 2}, {-1, -2}};
int n = 5, len;int diff() {int res = 0;for(int i = 1; i <= n; ++ i)for(int j = 1; j <= n; ++ j)res += (a[i][j] != c[i][j]);return res;
}bool dfs(int x, int y, int d, int last) {int res = diff();if(!res) return true;if(d == len) return false;if(d + res > 16) return false;for(int i = 0; i < 8; ++ i) {int xx = x + fx[i][0], yy = y + fx[i][1];if(xx < 0 || xx > n || yy < 0 || yy > n || i + last == 7) continue;swap(a[x][y], a[xx][yy]);if(dfs(xx, yy, d + 1, i)) return true;swap(a[x][y], a[xx][yy]);}return false;
}int main() {
#ifndef ONLINE_JUDGEfreopen("2324.in", "r", stdin);freopen("2324.out", "w", stdout);
#endifint T, flag = 0, sx, sy;c[1][1] = c[1][2] = c[1][3] = c[1][4] = c[1][5] = '1';c[2][1] = '0'; c[2][2] = c[2][3] = c[2][4] = c[2][5] = '1';c[3][1] = c[3][2] = '0'; c[3][3] = '*'; c[3][4] = c[3][5] = '1';c[4][1] = c[4][2] = c[4][3] = c[4][4] = '0'; c[4][5] = '1';c[5][1] = c[5][2] = c[5][3] = c[5][4] = c[5][5] = '0';for(scanf("%d", &T); T -- ; flag = 0) {for(int i = 1; i <= n; ++ i)scanf("%s", a[i] + 1);for(int i = 1; i <= n; ++ i) for(int j = 1; j <= n; ++ j)if(a[i][j] == '*')sx = i, sy = j;for(len = 0; len <= 15; ++ len) if(dfs(sx, sy, 0, -1)) {flag = 1; printf("%d\n", len); break;}if(!flag) puts("-1");}return 0;
}

luoguP2324 [SCOI2005]骑士精神 IDA*相关推荐

  1. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]

    题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...

  2. P2324 [SCOI2005]骑士精神(IDA*)

    思路:不是动骑士,而是动空格.只能动15次,证明搜索树的高的确定的,考虑IDA解决 IDA能很好地解决一些搜索中有上界的情况 大概就是搞一个估值函数,然后当前情况+估价函数>限制的情况直接剪掉这 ...

  3. [luoguP2324] [SCOI2005]骑士精神(A*?)

    传送门 蒟蒻并不懂A*是什么,但是题解里有个Astar 可以看出,当前棋盘和最终的棋盘如果有k个不同的,那么至少需要k-1步来移动 所以如果 当前步数 + k - 1 > limit 就直接退出 ...

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

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

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

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

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

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

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

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

  8. 『骑士精神 IDA*』

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

  9. 埃及分数The Rotation Game骑士精神——IDA*

    IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...

最新文章

  1. 数据结构和算法动态可视化
  2. 一文读懂word embedding
  3. 在python中、下列代码的输出是什么-python面试题详细总结(附答案)
  4. 失物招领php_新奥尔良圣徒队是否增加了失物招领?
  5. 【逆强化学习-2】最大熵学习(Maximum Entropy Learning)
  6. python内建函数是什么意思_python内建函数是什么意思
  7. java语言用数组接收字符_Java基础——数组应用之字符串String类
  8. 安装指定版本的GPU版本的tensorflow小技巧
  9. windows和android结合,Android和Windows 10可以很好地合作的10种方式
  10. 北京大学生物信息学(3)
  11. 拓端tecdat|R语言解决最优化运营研究问题-线性优化(LP)问题
  12. oracle判断字符串以什么开头_oracle存储过程 判断字符串开头
  13. 使用WebStorm开发web前端 网页中文乱码问题的解决方案
  14. WORD图标显示为白色解决办法
  15. java cad polyline,为AUTOCAD编写系列批量处理程序
  16. 2019半年总结——学习与成长
  17. MES主要功能模块介绍
  18. 程序员公众号用什么工具写?
  19. 使用百度地图API,定位并显示自己的位置
  20. Mybatisplus argument type mismatch

热门文章

  1. Java字符串转时间
  2. 正则表达式验证IP地址合法性
  3. 通用Mapper的example实例使用
  4. 彻底解决问题:签名不对,请检查签名是否与开放平台上填写的一致
  5. 微信小程序 页面传值文本解密问题
  6. 电脑安装双系统(win+Linux)的一些重要步骤总结
  7. 计算机控制技术注册二建,中央空调系统运行培训
  8. 煤炭价格预测:基于matlab的时间序列分析(主要流程+完整代码)
  9. [IT 男人帮 11-11] 毕业一年写给自己的警戒书-褪墨
  10. 河北省 建筑标准规范 合集