摘要: 这个题可以用A*算法,这里不深究。主要讲解一下普通BFS+hash判重、双向BFS。1)普通BFS+hash判重普通BFS必须hash判重。如果不判重会出现TLE的杯具(亲历……)具体是这么实现的:每次枚举可以到达的状态,如果不是目标状态,并且没有入队,那么就加入队列,直到找到目标状态为止。在这里用的Cantor展开判重。[pascal 代码]Const aim='123804765';VAR q:array[1..100000]of string; step:array[1..100000]of longint; facs:array[... 阅读全文
posted @ 2011-10-27 16:12 NoRush 阅读(1852) 评论(0) 推荐(1) 编辑
摘要: 题目要求最小变换次数,从搜索的角度讲,可以用BFS或者迭代加深。第一次写双向BFS,感觉还算标准的。判重的时候直接暴力O(tail)For循环了,不过依然很快~ Const maxn=10000; maxq=100000;Var a:array[0..1,0..maxn]of string; q:array[0..1,0..maxq]of... 阅读全文
posted @ 2011-10-27 15:34 NoRush 阅读(430) 评论(0) 推荐(0) 编辑