/*實現迪傑斯特拉的最短單源路徑演算法*/
//此演算法可以實現查詢單元最短路徑,並列印出各點的最短路徑值及路徑上各點#include
#include
#include
#define infinity 1000
typedef int vrtype;
typedef char infotype;
typedef int vertextype;
typedef enum graphkind; //定義圖型別
typedef struct arccellarccell;
typedef struct graphgraph;
typedef struct resultresult;
void createdn(graph *dn,result *r) //根據輸入產生圖
for(i=0;iarcs[i][j].adj=infinity;
dn->arcs[i][j].info=null;}}
printf("邊是否有附加資訊(y/n)?\n");
c=getch();
putch(c);
printf("\n");
if(c=='y'||c=='y')
m=1;
else m=0;
printf("請輸入邊數\n");
scanf("%d",&k);
dn->arcnum=k;
printf("請按先頭節點後尾節點然後權的順序輸入邊\n");
for(i=0;ivexs[a])
break;
printf("尾節點");
scanf("%d",&y);
for(b=0;bvexs[b])
break;
printf("權值");
scanf("%d",&e);
dn->arcs[a][b].adj=e;
if(m)
}}void shortpath_dij(graph *g,int v0,result *r)
}r->shortpathtable[v0]=0;
final[v0]=1;
for(i=1;ivexnum;i++)
}final[v]=1;
for(w=0;wvexnum;w++)
} }}
}}void print(graph *dn,int a,result *r)
printf("\n");
}}main()
{ int a,v,n;
graph dn;
result r;
createdn(&dn,&r);
printf("尋找哪個定點的最小路徑?\n");
scanf("%d",&a);
for(v=0;v
單源最短路徑 迪傑斯特拉演算法
dijkstra 演算法 中文名 迪傑斯特拉演算法 是由荷蘭計算機科學家 edsger wybe dijkstra 提出。該演算法常用於路由演算法或者作為其他圖演算法的乙個子模組。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示城市間開車行經的距離,該演算法可以用來找到兩個城市之間的最短路徑。我們...
Dijkstra(迪傑斯特拉) 單源最短路
在圖中,我們可以指定乙個點為起點,計算它到其餘各點的最短路徑。我們尋找乙個與它之間最近的點,以此為基礎不斷的更新它經過此點到其他點的最短路,並重複這個過程,直到所有的點都被尋找一遍。include include includeusing namespace std const int maxn 1...
迪傑斯特拉最短路徑
問題描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。在本題中,讀入乙個有向圖的帶權鄰接矩陣 即陣列表示 建立有向圖並按照以上描...