?? 最短路徑--迪杰斯特拉算法.txt
字號:
void shortpath_DIJ(int ad[][M],int k,int pre[], //dist[ ]存放當前找到的從k到每個終點的最短路徑長度,
int dist[],int n) //求結點k到其余結點的最短路徑;ad[][M]是圖的鄰接矩陣存儲方式
{ int i,j,p,wm; //pre[ ]表示從k到各終點的最短路徑上,此頂點的前一頂點的序號;
k=k-1; //數組的存儲從0開始
for(i=0;i<n;i++)
{ dist[i]=ad[k][i]; //dist[ ]的初值是矩陣中的第k行
if(dist[i]<MAX) pre[i]=k+1; //若某結點和k結點直接連通,則此頂點的前一頂點的序號就是k;否則為0
else pre[i]=0;
}
pre[k]=0; dist[k]=0; ad[k][k]=1;
//賦初值語句完成,準備工作結束
for(j=0;j<(n-1);j++)
{ wm=MAX; p=-1;
for(i=0;i<n;i++)
if((ad[i][i]==0)&&(dist[i]<wm))
{ p=i;
wm=dist[i];
}//查找未被處理過的當前路徑(權值)最小的結點在數組中的下標p
if(p==-1) break;
else{ ad[p][p]=1; //對角線置為1,表示被處理
for(i=0;i<n;i++)
if(ad[i][i]==0)
if(dist[p]+ad[p][i]<dist[i]) //在矩陣剛確定的p行中查找與dist[p]的和小于dist[i]的結點
{ dist[i]=dist[p]+ad[p][i]; //修改此結點的對應最短路徑(權值)的值
pre[i]=p+1; //pre[ ]存儲從k到i的最短路徑上前一頂點的序號;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -