Eight(经典题,八数码)】的更多相关文章

Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 20993    Accepted Submission(s): 5634Special Judge Problem Description The 15-puzzle has been around for over 100 years; even if you don't…
题意: 题意就是八数码,给了一个3 * 3 的矩阵,上面有八个数字,有一个位置是空的,每次空的位置可以和他相邻的数字换位置,给你一些起始状态 ,给了一个最终状态,让你输出怎么变换才能达到目的. 思路: 首先我们先判断一下可不可以达到最终目的,方法是根据逆序数,只要终止状态和起始状态的逆序数(空的位置不算)奇偶性相同就能,否则不能; 证明 : 加入当前空的位置是i,针对3 * 3 的也就是八数码问题(可能有别的数码,根据奇偶性答案不同) 如果向前或向后移动的话 当前的逆序数不变,如果像上移动的话有…
建议先学会用康托展开:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a numb…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a number from 1 to 15 on it, and all pack…
前段时间人工智能的课介绍到A*算法,于是便去了解了一下,然后试着用这个算法去解决经典的八数码问题,一开始写用了挺久时间的,后来试着把算法的框架抽离出来,编写成一个通用的算法模板,这样子如果以后需要用到A*算法的话就可以利用这个模板进行快速开发了(对于刷OJ的题当然不适合,不过可以适用于平时写一些小游戏之类的东西). A*算法的原理就不过多介绍了,网上能找到一大堆,核心就是估价函数 g() 的定义,这个会直接影响搜索的速度,我在代码里使用 C++/Java 的多态性来编写业务无关的算法模板,用一个…
一.题意 经典的八数码问题,有人说不做此题人生不完整,哈哈.给出一个含数字1~8和字母x的3 * 3矩阵,如: 1  2  X            3 4  6            7  5  8 现在要你移动x的位置(方向为上.下.左.右),使得这个矩阵为: 1  2  3             4  5  6            7  8 x 求出最后能得到这个解的移动方案,输出移动的操作.(不要求最优解,也就是不要求移动次数最少) 二.题解 这个8数码问题,我们可以把它看成是一个全…
题目链接 https://vjudge.net/problem/HDU-1043 经典的八数码问题,学过算法的老哥都会拿它练搜索 题意: 给出每行一组的数据,每组数据代表3*3的八数码表,要求程序复原为初始状态 思路: 参加网站比赛时拿到此题目,因为之前写过八数码问题,心中暗喜,于是写出一套暴力bfs+hash,结果TLE呵呵 思路一:bfs+hash(TLE) #include <cstdio> #include <cstring> #include <queue>…
题目来源: http://poj.org/problem?id=1077 题目大意: 给你一个由1到8和x组成的3*3矩阵,x每次可以上下左右四个方向交换.求一条路径,得到12345678x这样的矩阵.若没有路径,则输出unsolvable. 经典的八数码问题. 这题我用A*算法做的.推荐一篇博客,从大体上介绍了一下启发式算法的代表A*算法: https://www.cnblogs.com/zhoug2020/p/3468167.html 首先就是判重的问题,搜索的状态是九个数(含x),开个九重…
八数码:我使用了map判重 结果一遍就轻松A题了. 关于map的用法: ①创建一个map map<char,int>m; map<string,long long int>m1; 很浅显... ②插入 m.insert(make_pair(19260817,"naive")); m['R']=3; ③判重 我们只需让出现过的key的value值为1/true 那么是否出现过就是:if(m[2]) /// 掌握了map的用法之后八数码就很ok了. 基本思想是广搜.…
HDU 1043 Eight 八数码问题(经典问题) 题意 经典问题,就不再进行解释了. 这里主要是给你一个状态,然后要你求其到达\(1,2,3,4,5,6,7,8,x\)的转移路径. 解题思路 这里有很多的解法,我这里是参考的学长给的题解,真的写的巨好啊!可惜不知道是哪位学长写的>︿<. 下面就是学长写的题解了,自己改动和增添了一点. 经典问题,解法有很多,我们先来计算一下八数码问题一共有多少种状态.八数码问题包含九个字符,这九个字符可以任意排列,也就是\(9! = 362880\).所以八…