摘要:
最近做题时又遇到了八数码问题(见POJ1077),记得高中搞OI时也做过这道题,AC的时候内牛满面。其实这道题用朴素的广搜即可AC,只不过记录各个状态比较麻烦,如果把字符串当成一个列数直接存储的话需要10e9个数,这样显然是会爆内存的。所以很容易想到建立hash表把每个状态一一映射,这样只有9!个状态,关键问题在于hash函数的构造。当初做这题的时候是借鉴了别人的hash函数,也没怎么懂原理,仿造着写上去调了一下午也AC了。其实像这种全排列的问题有一种特殊的hash函数,即康托展开。 举个例子,{1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排...
阅读全文