1754. 骑士精神
描述 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,
且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。
给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步数完成任务,若果步数大于15,返回-1。
目标棋盘是 “11111” “01111” “00*11” “00001” “00000”
解法:
- 问题等价于从最终状态经过15步是否能达到起始状态。
- 状态用数字表示。
- BFS搜索
- 在最后步数过高的情况下,能到达的状态是指数级增加的。但是,如果状态和起始状态相差位数比剩余步数大太多就可以排除。
class Solution:"""@param a: the Initial state@return: the fewest steps to complete the task"""def getSteps(self, a):# Write your code hereGoal = [[1,1,1,1,1],[0,1,1,1,1],[0,0,2,1,1],[0,0,0,0,1],[0,0,0,0,0]]x, y = -1, -1P = [1] * 25for i in range(1, 25): P[i] = 10 * P[i-1]A = [[0] * 5 for _ in range(5)]for i in range(5):for j in range(5):if a[i][j] == '*':A[i][j] = 2x, y = i, jif a[i][j] == '1':A[i][j] = 1if a[i][j] == '0':A[i][j] = 0def trans(A):ret = 0for i in range(5):for j in range(5):ret += P[i*5+j] * A[i][j]return retdef swap(Q, rem):nQ = []for state,x, y in Q:for dx, dy in [[1,2],[1,-2], [-1,2],[-1, -2], [2, 1], [2,-1], [-2, 1],[-2, -1]]:nx, ny = x + dx, y + dyif 0 <= nx < 5 and 0 <= ny < 5:digit = state // P[5*nx+ny] % 10nstate = state - 2 * P[5*x + y] + 2 * P[5*nx + ny] + digit * P[5*x + y] - digit * P[5*nx + ny]if nstate not in vis and diff_bit(target, nstate) - 1 <= rem:vis.add(nstate)nQ.append((nstate,nx, ny))return nQdef diff_bit(s1, s2): ret = 0for _ in range(25):if s1 % 10 != s2 % 10:ret += 1s1 //= 10s2 //= 10return ret target = trans(Goal)if target == trans(A): return 0vis = {trans(A)}Q = [(trans(A), x, y)]for i in range(1, 16):nQ = swap(Q, 15 - i)vis |= set(nQ)if target in vis:return iQ = nQreturn -1if __name__ == "__main__":G = ["10110","01*11","10111","01001","00000"]print(Solution().getSteps(G))
1754. 骑士精神相关推荐
- 【BZOJ1085】【SCOI2005】骑士精神 [A*搜索]
骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB [Submit][Status][Discuss] Description 在一个5×5的棋盘上有12个白色 ...
- [启发式搜索/A*] [SCOI2005]骑士精神题解
洛谷-骑士精神 启发式搜索-A* 估价函数 对于当前状态,我们可以将其与目标状态对比,得到一个预估的代价,即最少(不一定满足题意)的代价,得到这个代价的函数叫做估价函数 对于一个最短路问题来说,我们可 ...
- 『骑士精神 IDA*』
骑士精神(SCOI2005) Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵 ...
- BZOJ1085 [SCOI2005] 骑士精神
[问题描述] 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相 ...
- [luogu 2324][SCOI 2005] 骑士精神 (A*算法)
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
- 洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1663 [Submit][St ...
- 埃及分数The Rotation Game骑士精神——IDA*
IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...
- bzoj1085骑士精神(搜索)
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1893 Solved: 1051 Description ...
- 算法复习——迭代加深搜索(骑士精神bzoj1085)
题目: Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标 ...
最新文章
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入
- 机器学习大神迈克尔 · 乔丹:我讨厌将机器学习称为AI
- navigating the online library
- ASP.NET MVC3 技术(二) WebGrid 的使用方法
- 在html中三个图片切换,轻松搞定网页中的图片切换
- C#中ManualResetEvent用法简介
- 戴尔集群监控与管理系统_监控与管理
- 版本号控制-GitHub
- C语言——循环控制语句
- 一文看懂卷积神经网络
- php pdo 错误信息,PHP的PDO错误与错误处理
- STM32工作笔记0055---认识pcbdoc文件Schdoc文件
- 关于信道利用率的总结与一道习题的最终解释
- AI技术如何做工程?
- 员工提出离职时,再挽留已经迟了
- vs2019,C#,MySQL创建图书管理系统3(管理员相关页面的布局和设计实现,图书显示,图书添加)
- 计算机程序漏洞用英语怎么说,安全漏洞的英文
- 【财经期刊FM-Radio|2021年03月04日】
- 小白入门spring——IOC依赖注入
- webpack构建中tree shaking、scope Hoisting(面试题)
热门文章
- 关闭默认共享-关于Windows的默认共享介绍
- 华东师范大学2020计算机研究生招生简章,2020华东师范大学计算机考研大纲
- RGGEDU-Rob Grimm静物食物美食菜谱摄影技巧与后期-中文字幕
- 局域网ip冲突检测工具_只需一台Android设备就能打通局域网内部通讯:文字聊天与文件传输...
- 激光认证,激光安全等级认证,激光安全认证,激光等级认证,激光FDA认证。
- Windows如何安装Clouda
- Clouda框架开发留言板实例
- 微信小程序通过BLE低功耗蓝牙向USB HID键盘设备输出汉字(内含GBK编码转汉字)
- 2018-2019-2 20189201 《网络攻防实践》第八周作业
- 使用虚拟光驱显示函数不正确的解决