迪傑斯特拉 用了STL

2021-08-27 16:17:40 字數 1402 閱讀 7520

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,這個向量儲存的是其他點的最短距離,初...