永发信息网

C语言算法BFS+HASH是什么

答案:1  悬赏:10  手机版
解决时间 2021-07-25 22:53

即将参加NOIP,在VIJOS上很多题目都说可以用BFS+hash算法

宽搜当然知道,可是把hash加进来是什么意思?求解

例题:vijos p1029

最佳答案

就是 康托hash判重 P1029 的所谓的hash就是 康托展开(作用是判重)


目标状态就8种
276951438
294753618
438951276
492357816
618753294
672159834
816357492
834159672

由这八个BFS扩展,总共362880种状态,共12种交换方法。



9 的全排列有 三十多万 , 利用 康托 判断出 当前搜索到的 序列 是这 三十多万个排列方式中的第几个, 以此来判重......



康托展开:
{1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个 123 132 213 231 312 321代表的数字 1 2 3 4 5 6 也就是把10进制数与一个排列对应起来。他们间的对应关系可由康托展开来找到。 如我想知道321是{1,2,3}中第几个大的数可以这样考虑 第一位是3,当第一位的数小于3时,那排列数小于321 如 123 213 小于3的数有1,2 所以有2*2!个 再看小于第二位2的 小于2的数只有一个就是1 所以有1*1!=1 所以小于321的{1,2,3}排列数有2*2!+1*1!=5个所以321是第6个大的数。 2*2!+1*1!是康托展开 再举个例子 1324是{1,2,3,4}排列数中第几个大的数 第一位是1小于1的数没有,是0个 0*3! 第二位是3小于3的数有1,2但1已经在第一位了所以只有一个数2 1*2! 第三位是2小于2的数是1,但1在第一位所以有0个数 0*1! 所以比1324小的排列有0*3!+1*2!+0*1!=2个 1324是第三个大数。





我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
买床单能还多少价格?
『调查』路过进来看看:问各位友友个问题,你
谁能把下面那个句子翻译成英文: 沉默是一种
微博和支付宝怎么解绑,新浪微博如何解除支付
前人插秧!!
亲嘴会让人怀孕吗?
杭州下沙这边诺基亚N85的行货价格是多少?
H1N1育苗有什么作用?
刚刚我对一个女孩子说我送她一个字说贱,我应
风车是怎样发电的?
苹果、香焦…一些水果一次性吃太多会有哪些影
用芦荟甘油擦脸好吗?
求关于感动的八百字作文高中的……
朋友 是什么?
穿越火线问问管理员ROCKETS的回答采纳率是多
推荐资讯
DNF有G练什么职业好?
AVA战地之王为什么我的账号只能玩电信不能玩
推荐几种婴儿消化不良腹痛的药,并说明下,谢
我怎么样做事情做的更好?
DNF西南1,喇叭会保持在什么价格呢?
丝路英雄中我如果今天退出了一个联盟,我可以
这样算是敲诈勒索吗?
武功的最高境界为什么是“忍”
怎么QQ华夏没有游戏人生的荣誉值
助理会计师是在校考好,还是出社会考好呢?
恋人手中樱花草,这是谁的什么歌?
在抢车位中:爱心车位是什么?怎么不能贴阿,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?