谢谢二位的回复:
我想得到的是已有具体两个格子之间的最短路径,而不是从一顶点到其余各顶点的最短路径,所以我认为应该是弗洛伊德算法而不是Dijkstra算法,另外我搜寻了论坛以前的帖子,也有上面这段代码,但这段代码是针对带权图的,而我的情况应该是无向图(也无权),我已经说过了,我的邻接矩阵的元素只为0或1。
这个函数的参数是不是: G,邻接矩阵 n 顶点数 s 起点 t 终点 path存放路径数组?返回值是路径长度?
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];
}