實現迪傑斯特拉的最短單源路徑演算法

2021-08-29 06:53:55 字數 1479 閱讀 3440

/*實現迪傑斯特拉的最短單源路徑演算法*/
//此演算法可以實現查詢單元最短路徑,並列印出各點的最短路徑值及路徑上各點

#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中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。在本題中,讀入乙個有向圖的帶權鄰接矩陣 即陣列表示 建立有向圖並按照以上描...