1. 程式人生 > >設計一個演算法,輸出從u到v的所有最短路徑(採用鄰接表儲存)

設計一個演算法,輸出從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;//恢復環境,使該頂點可重新使用

}