迪傑斯特拉演算法

2022-09-19 07:51:15 字數 3031 閱讀 7504

/

/*用迪傑斯特拉演算法求有向網g的v0頂點到其他頂點的最短路徑p,以及其帶權長度d。其中p是二維陣列,行號表示終點,列號表示經過的路徑。p[v][w]為true的意思就是從v0到v,要經過w點)。d是一維陣列,表示某頂點到v0點的路徑長(d[v] == 10表示從v0到v要經過的路徑長度為10。final存放已經求得的路徑結果(比如final[v]為true表示已經找到v0到v的最短路徑)。*/

void  shorttestpath_dij(  mgraph  g,  int  v0,  pathmatrix  &p,  shortpathtable  &d)

if(  d[v]  <  infinity  )  

}d[v0]  =  0;  final[v]  =  true;

/*下面開始主迴圈,每次求得v0到某個v頂點的最短路徑,同時重新整理之前的最短路徑。*/

for(  i  =  1;  i  <  g.vexnum;  ++i  )  

}  final[v]  =  true;  //  標記已經找到

for(  w  =  0;  w  <  g.vexnum;  w++  )  }}

}          

/*

測試資料 教科書 p189 g6 的鄰接矩陣 其中 數字 1000000 代表無窮大

6

1000000 1000000 10 100000 30 100

1000000 1000000 5 1000000 1000000 1000000

1000000 1000000 1000000 50 1000000 1000000

1000000 1000000 1000000 1000000 1000000 10

1000000 1000000 1000000 20 1000000 60

1000000 1000000 1000000 1000000 1000000 1000000

結果:

d[0]   d[1]   d[2]   d[3]   d[4]   d[5]

0   1000000   10     50     30     60

*/

#include

#include

#define max 1000000

usingnamespacestd;

intarcs[10][10];//鄰接矩陣

intd[10];//儲存最短路徑長度

intp[10][10];//路徑

intfinal[10];//若final[i] = 1則說明 頂點vi已在集合s中

intn = 0;//頂點個數

intv0 = 0;//源點

intv,w;

voidshortestpath_dij()

}

d[v0] = 0; final[v0]=0;//初始化 v0頂點屬於集合s

//開始主迴圈 每次求得v0到某個頂點v的最短路徑 並加v到集合s中

for(inti = 1; i < n; i++)

}

}

final[v] = 1;//選出該點後加入到合集s中

for(w = 0; w < n; w++)//更新當前最短路徑和距離

}

}

}

intmain()

}

shortestpath_dij();

for(inti = 0; i < n; i++)printf("d[%d] = %d\n",i,d[i]);

return0;

}

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...

迪傑斯特拉演算法

迪傑斯特拉演算法用來計算圖中某一點到其他點的最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和 假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離 初始化圖arr 用乙個鄰接矩陣來表示一張圖,矩陣元素 初始化一維向量d,這個向量儲存的是其他點的最短距離,初...