poj1077小议

来源:互联网 发布:信捷plc 编程软件3.5 编辑:程序博客网 时间:2024/06/10 16:04

对于此题,是A*与康拓展开是难点,经典题目啊,没做人生不完整啊;;

再次介绍一下A*与康拓展开,至于代码下次再发,因为ACM主要是要学到知识;;;

首先::A*算法::

A*算法,是由DFS变形而来的启发式搜索,对于DFS,我们给定一个方向,这就会一直沿着这个方向去搜索,不管是不是偏离的愈来愈越远,他的优点是全面,但是却失去了效率,简单易行且耗时!!因次有了启发式搜索A*算法,,对于A*则是有一个公式来计算所搜索的一系列状态对于目标节点的容易到达层度,对于简单的搜索则是

h(x) =  层数 + 当前位置但目标节点的搜索步数;;因次则是在搜索后排序,然后在把h(x)最小的优先搜索;;简而言之,就是符合人的正常思考方式;会优先考虑靠近目标节点的节点在DFS;



康拓展开::

是反应一个排列与一个数的映射关系,常常用来判重,在这题中就是用这一展开来把没一个不同的状态与一个数字对应,就可以判重了;;

展开方法::

原理是把所有排列都由小到大编号,最小的是0,第二小的是1,他们的编号是比他们小的排列的个数,所以八数码问题就是最多有9!种状态;;

举个例子,,321的排列就是看第一个数,1,2比三小,所以第一位比三小的排列有2*2!,而依次类推,321在排列中是第5号;这样就把排列和数字意义对应了;;

具体代码等我的下一篇博客;;;

0 0
原创粉丝点击