n個點,t條雙向邊,輸入:
點u編號 點v編號 距離
定義帶權圖
//定義邊
struct edge
;
vector
< edge > g[maxn];//每個g[i]存放的是定點編號為i的點相鄰的邊
新增邊void add_edge(int u,int v,int dist)
//如果是雙向邊(無向圖)
add_edge(u,v,dist);
add_edge(v,u,dist);
定義
typedef pair< int,int > p
priority_queuevector
,greater> que;
#include< queue >
typedef pair < int,int > p;//第一維是距離,第二維是點的編號,優先佇列先按照第一維大小彈出結點
int d[maxn];//存放的是起始點到各點的最短路徑長度
void dijkstra(int s)//s是起始點的編號
d[s]=0;
que.push(p(0,s));
//一直找出目前沒有確定最短路徑的點中,距離起始點最近的乙個點
while(!que.empty())
}//for
}//while
}//dijkstra
完整的**:
#include
#include
#include
#include
#include
using
namespace
std;
#define maxn 1010
#define inf 210000
struct edge
;vector
g[maxn];
int d[1010];//每個點到起始點的最短距離
int n;
void add_edge(int u,int v,int dist)
typedef pair p;//第一維是距離,第二維是起始點編號
//優先佇列先按照第一維大小彈出結點
void dijkstra(int s)
d[s]=0;
que.push(p(0,s));
while(!que.empty())}}
}int main()
dijkstra(n);
printf("%d",d[1]);
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,這個向量儲存的是其他點的最短距離,初...