呵呵, 我用的是循环遍历, 每层加剪枝, 相当于bfs吧!
不过比bfs用的空间少的多.
| Rank:93 | 6223070 | Memory:164K | Time:0MS | C++ | 1950B | 2009-12-09 09:45:29 |
code2:
总结一下:
这种用16位的二进制数表示4*4方格所有状态的方法也很巧妙.
具体说来,用16位二进制数表示一个4*4方格的当前状态,
通过对这个16位二进制数的任意一位进行变化后,进入队列.
不过效率显然不如用for循环+剪枝来的快, 因为先对一行的状态
进行遍历, 剪枝会多一些.
可以发现, bfs的精髓是: 采用二进制数做状态的转移的量. bfs不过是
保存状态和寻找他的下一状态.
本文介绍了一种使用16位二进制数表示4x4方格状态,并通过遍历加剪枝的方式实现状态转换的算法。该算法采用C++实现,通过对比两种不同的实现方式——一种为循环遍历加剪枝,另一种为广度优先搜索(bfs),展示了不同算法的特点及效率。
274

被折叠的 条评论
为什么被折叠?



