資料結構 最短路徑(Dijkstra c 實現)

2021-07-02 07:35:33 字數 1887 閱讀 7628

#define maxsize 10 //頂點最大個數

typedef string vertextype; //頂點型別

typedef int edgetype; //權值型別,有向圖(0,1),無向圖(權值,無窮大)

#define infinity 0xffff

typedef struct

mgraph;

#define success 1

#define unsuccess 0

typedef int status;

//由頂點值得到頂點索引

int getindexbyvertexval( const mgraph& mg, vertextype val )

return -1;

}//建立無向圖

status creategraph( mgraph& mg )

for ( int i = 0; i < mg.ivexnum; ++i ) }

cout << "請輸入由兩點構成的邊及其權值:";

for ( int i = 0; i < mg.iarcnum; ++i )

return success;

}//迪傑斯特拉演算法(dijkstra)求最短徑

//從v0開始,找到到各個點的最短路徑長

//pathmatrix儲存了路徑資訊,比如pathmatrix[3] = 4,表示v3的前趨為v4

//pathtable[i]儲存了v0-->vi的路徑長度

typedef int pathmatrix;

typedef int shortpathtable;

void shorttestpath_dijkstra( const mgraph& g, int v0,

pathmatrix *pathmatrix, shortpathtable* pathtable )

final[v0] = 1; //v0本身,不需要求

pathmatrix[v0] = 0;

pathtable[v0] = v0;

for ( int i = 1; i < g.ivexnum; ++i )//主迴圈,求v0到各個頂點的最短路徑

}final[k] = 1;

//重新調整當前到各個點的最短路徑長

for ( int j = 0; j < g.ivexnum; ++j )

} }}

//列印出到各點的最短路徑結果

void printshortestpath( int v0, int ivexnum, const pathmatrix *pathmatrix,

const shortpathtable* pathtable )

cout << "v" << v0 << "-->";

for ( int j = 0; j < (int)pathtemp.size(); ++j )

cout << "null" << "路徑長為:" << pathtable[i] << endl; }}

資料結構 最短路徑 Dijkstra

include stdio.h include stdlib.h include io.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define maxedge 20 ...

資料結構實驗 最短路徑

實驗內容 對於使用者隨機輸入的乙個有向帶權圖,求從某個頂點到其他各頂點的最短路徑。include define maxv 20 define inf 32 若不存在,則設的權為32,表示無窮大 typedef struct vertextype 頂點型別 typedef struct matgrap...

資料結構 最短路徑問題

求解這個問題的時候我們用到dijkstra演算法,演算法的描述如下 1 首先定義乙個陣列用來儲存從源點到每乙個頂點的最短路徑 不可達用無窮表示 使用s集合來儲存已經求得最短路徑的頂點,那麼剩餘頂點就存放在集合t中 2 第一次迭代的時候s只有源點,然後根據s集合中的頂點來更新最短路徑陣列d中的值,每次...