/
/*用迪傑斯特拉演算法求有向網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
using
namespace
std;
int
arcs[10][10];
//鄰接矩陣
int
d[10];
//儲存最短路徑長度
int
p[10][10];
//路徑
int
final[10];
//若final[i] = 1則說明 頂點vi已在集合s中
int
n = 0;
//頂點個數
int
v0 = 0;
//源點
int
v,w;
void
shortestpath_dij()
}
d[v0] = 0; final[v0]=0;
//初始化 v0頂點屬於集合s
//開始主迴圈 每次求得v0到某個頂點v的最短路徑 並加v到集合s中
for
(
int
i = 1; i < n; i++)
}
}
final[v] = 1;
//選出該點後加入到合集s中
for
(w = 0; w < n; w++)
//更新當前最短路徑和距離
}
}
}
int
main()
}
shortestpath_dij();
for
(
int
i = 0; i < n; i++)
printf
(
"d[%d] = %d\n"
,i,d[i]);
return
0;
}
迪傑斯特拉演算法
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,這個向量儲存的是其他點的最短距離,初...