无向图如何求最短路径?

aiur 2002-06-10 04:23:57
9*9的格子,格子中会有棋子,我现在要判断把某个棋子移动到另一处(可以移动的条件是中间没有其他棋子阻挡),通过递归我可以判断棋子是否可以移动,但我还想得到移动的最短路径,这好像是数据结构里的弗洛伊德算法,还请各位指点具体实现过程。(我已经得到邻接矩阵,元素就是0和1)
...全文
697 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiur 2002-06-13
  • 打赏
  • 举报
回复
嗯,终于了解了~~~
LeeMaRS 2002-06-12
  • 打赏
  • 举报
回复
path里面存放的是最短路径.
一般情况下,应该是这样使用得到的path数组的:
假设源点是1.目标点是3.共有6个点.
则path有6个元素,从path[1]到path[6].
取path[3].得到4,则说明要从1走到4再走到3,最短
那么,从1走到4又怎么走最短呢?就是取path[4]了.
这是一个递归的过程.
aiur 2002-06-12
  • 打赏
  • 举报
回复
我再顶~~~
one_add_one 2002-06-11
  • 打赏
  • 举报
回复
Dijkstra是求点到点的最短路。复杂度为O(N^2)
Floyd算法是球所有点的最短路。复杂度为O(N^3)

这个问题用Dijkstra算法就行了。你把每一条边的权赋成1就行了。

用广度搜索也可以。
aiur 2002-06-11
  • 打赏
  • 举报
回复
谢谢二位的回复:
我想得到的是已有具体两个格子之间的最短路径,而不是从一顶点到其余各顶点的最短路径,所以我认为应该是弗洛伊德算法而不是Dijkstra算法,另外我搜寻了论坛以前的帖子,也有上面这段代码,但这段代码是针对带权图的,而我的情况应该是无向图(也无权),我已经说过了,我的邻接矩阵的元素只为0或1。
这个函数的参数是不是: G,邻接矩阵 n 顶点数 s 起点 t 终点 path存放路径数组?返回值是路径长度?
aiur 2002-06-11
  • 打赏
  • 举报
回复
嗯,版主出马啦~~~
我现在用这个函数可以得到正确的最短路径的长度(也就是该函数的返回值),可是得不到具体的路径内容。

这个函数的几个参数是什么意思呢?
G,邻接矩阵 n 顶点数 s 起点 t 终点 path存放路径数组?
前几个参数都对,但是path里好像存放的并不是具体的最短路径啊?
starfish 2002-06-11
  • 打赏
  • 举报
回复
1+1说得没错
ninny 2002-06-10
  • 打赏
  • 举报
回复
nt Dijkstra(Graph G,int n,int s,int t, int path[])
{
int i,j,w,minc,d[max_vertexes],mark[max_vertexes];
for (i=0;i<n;i++) mark[i]=0;
for (i=0;i<n;i++)
{ d[i]=G[s][i];
path[i]=s; }
mark[s]=1;path[s]=0;d[s]=0;
for (i=1;i<n;i++)
{ minc=infinity;
w=0;
for (j=0;j<n;j++)
if ((mark[j]==0)&&(minc>=d[j])) {minc=d[j];w=j;}
mark[w]=1;
for (j=0;j<n;j++)
if ((mark[j]==0)&&(G[w][j]!=infinity)&&(d[j]>d[w]+G[w][j]))
{ d[j]=d[w]+G[w][j];
path[j]=w; }
}
return d[t];
}
one_add_one 2002-06-10
  • 打赏
  • 举报
回复
dijkstra算法

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧