摘要: A*算法入门A*算法是一种启发式的搜索,不是纯粹的盲目式搜索,A*算法中有个估价算法g(n),对于每个点而言,都有一个g(n)和h(n)来确定的f(n),实际上就是以f(n)为参考权值来确定搜索的方向,在这里,我们的h(n)表示的是从s点出发到n这个点现在走过的路径长度,而g(n)表示的是从n到e的最短长度的大小,那么就确定了搜索的优先性,这里的A*算法的估价函数g(n)是完美估价,搜索的方向一定是对的。分析:建图的时候建一个正向的一个反向的,反向的图利用dij求终点到每个点的最短路,即为搜索的估价函数。注意的地方:st==en 的时候必须k++ 因为题目要求必须走过路径。详细见代码 1 #. 阅读全文
posted @ 2012-08-30 23:23 Missa 阅读(2156) 评论(1) 推荐(1) 编辑
摘要: A*可以理解成bfs+优先队列,优先队列的权重就是估价函数。。。。原文英文版本点这里翻译原文点这里会者不难,A*(念作A星)算法对初学者来说的确有些难度。这篇文章并不试图对这个话题作权威的陈述。取而代之的是,它只是描述算法的原理,使你可以在进一步的阅读中理解其他相关的资料。最后,这篇文章没有程序细节。你尽可以用任意的计算机程序语言实现它。如你所愿,我在文章的末尾包含了一个指向例子程序的链接。压缩包包括C++和BlitzBasic两个语言的版本,如果你只是想看看它的运行效果,里面还包含了可执行文件。我们正在提高自己。让我们从头开始。。。序:搜索区域假设有人想从A点移动到一墙之隔的B点,如下图,绿 阅读全文
posted @ 2012-08-30 19:37 Missa 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题意:有N头牛,每头牛都会有比他强的或者弱的牛,按照牛的强弱排序,问有几头牛的位置是确定的。5 5(n,m)4 34 23 21 22 5则4>3>2>5 && 1>2>5故只有2,5是确定的。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 #define MAXN 102 8 #define MAXM 4510 9 10 阅读全文
posted @ 2012-08-30 19:03 Missa 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题意:求两点之间的所有路径中的最高点最低的路径的最高点。例如1-> 2 123-> 2 81-> 3 5则输出8。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 #define MAX(x,y) ((x)>(y)?(x):(y)) 8 #define MIN(x,y) ((x)>(y)?(y):(x)) 9 #define inf 0x7f 阅读全文
posted @ 2012-08-30 14:48 Missa 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 题意:有个城市被一条河分成了南北两部分, 它们之间有N+1个航道, 标记为0~N, 每个航道的两端是一个码头, 然后每个码头都只属于一个航道, 航道间也不交叉. 现在给出各航道的航行时间以及同一河岸上各码头间的行走时间, 求出从起点S出发到终点T所需的最短时间.分析:一共有6种点:①点在北岸且不是左右端点, 则它可以往左, 右走, 或通过航道去南岸;②点在南岸且不是左右端点, 则它可以往左, 右走, 或通过航道去北岸;③点是北岸左端点, 则它可以往右走, 或通过航道去南岸;④点是北岸右端点, 则它可以往左走, 或通过航道去南岸;⑤点是南岸左端点, 则它可以往右走, 或通过航道去北岸;⑥点是南岸 阅读全文
posted @ 2012-08-30 13:38 Missa 阅读(438) 评论(0) 推荐(0) 编辑