第一次写A*算法 写的有点晕,思路还是很明显很清晰的 就是处理起来有些麻烦 ,自己写了一个堆,可以说是优先队列,网上也有看到用STL的priority_queue的 以后研究下.
今天写了一天,毕竟第一次接触A*算法,第一次写,算是我的处女作,不过结果没让我失望 1A了,结果16Ms 还挺快,提交第二次就成0ms了,这就看运气. F=G+H, 就是A*算法的精华所在了 每次都取F最小的,这样是最有可能到达结果的, 因为在程序运行过程中 要更新那些已经在堆中的元素的F值,所以自己写堆也就方便了这一点,不用浪费空间,把重复的状态再加入优先队列里.因为更改了堆中的某个节点,就只要像新插入一个节点那样,跟他的父节点比较,把自己提升到正确的位置,当然,前提是要知道自己要更新的节点在堆中的什么位置,这也就要position[k] 来记录状态k在堆中的位置, 改变位置时要更新position的值.
总之,今天还是有很大收获的...........................不过以后如果再写,估计还要花上半天时间,自己的思维经常乱啊...ps:今天端午节... orz..我是菜鸟...
还有一双向广搜 方法:::http://blog.youkuaiyun.com/dizem/archive/2009/08/12/4436663.aspx
IDA* 刚刚看了一下, 貌似是迭代加深搜索 加了一个估值函数,具体也没怎么了解 照着别人的程序写的.
只能说数据太....没有unsolvable的情况 否则肯定TLE了, 搜索深度到40就已经慢的不行了,更别说100 跳出循环了....