设计一个算法,输出从u到v的全部最短路径(採用邻接表存储)

思想:用path数组存放路径(初始为空),d表示路径长度(初始为-1),查找从顶点u到v的最短路径过程如图所看到的:





















相应算法例如以下:

void FindPath(AGraph *G,int u,int v,int path[ ],int d)

{

int w,i;

ArcNode *p;

d++;

path[d]=u;

visited[u]=1;//路径长度增1

if(u==v)

{

for(i=0;i<=d;i++)

printf("%2d",path[i]);

printf("\n");

}

p=G->adjlist[u].firstarc;//p指向v的第一个相邻点

while(p!=NULL)

{

w=p->adjvex;

if(visited[w]==0)//若w顶点未訪问,递归訪问它

FindPath(G,w,v,path,d);

p=p->nextarc;//p指向v的下一个邻接点

}

visited[u]=0;//恢复环境。使该顶点可又一次使用

}

posted @ 2016-03-12 10:33  blfshiye  阅读(352)  评论(0编辑  收藏  举报