dij最短路 堆優化

2021-09-01 18:41:10 字數 2616 閱讀 9712

dij乙個主要思路,將所有點分為兩個集合s,t,初始集合s中只包含了起點,t集合包含所有點,要做的就是從t集合中不斷選取與s集合中的點距離最短的並且未被加入s集合中的點,將這個點加入s集合,並用這個點去更新所有與這個點相鄰的點,重複操作直到所有點都被加入s集合中。下面看一下dij的過程:

dij演算法步驟:

dij動態圖展示a到b最短路:

普通dij**: 

//時間複雜度o(n*n),

//空間複雜度o(n*n),採用鄰接矩陣存圖,若採用鄰接表則為(nlogn)

//關於鄰接表鄰接矩陣使用:

//講述前先看這,假設乙個圖點有n個,邊有m條,當n>mlogm時為稀疏圖,反之為稠密圖

//而鄰接表適合於稀疏圖,鄰接矩陣適合稠密圖

#includeusing namespace std;

const int maxn=1005;

const int inf=0x3f3f3f3f;//無窮大

int edge[maxn][maxn];//鄰接矩陣存邊

bool vis[maxn];//標記點是否訪問

int dis[maxn];//記錄起點到終點的最短路

int n,m;

void init()

for(int i=0;i<=n;i++)

}}void dij(int st)

e[maxn*maxn];

struct node

friend bool operator

};int head[maxn],num;

int n,m;

int vis[maxn],dis[maxn];

void init()

void add(int st,int en,int len)

void dij(int st)

dis[st]=0;

priority_queueq;

q.push(node(st,0));

while(!q.empty())}}

}int main()

int st,en;

scanf("%d%d",&st,&en);

dij(st);

printf("%d\n",dis[en]);

}return 0;}/*

測試資料:

6 81 2 1

1 3 10

2 4 4

3 5 6

4 6 10

5 6 6

2 5 7

3 4 5

1 6ans=14

*/

整個圖最短路詳細版:

/*描述:求圖中所有任意兩點最短路的最大值、中位數、平均值*/

/*思路:採用堆優化的dij,普通dij乙個主要思路,將所有點分為兩個集合s,t,

初始集合s中只包含了起點,t集合包含所有點,要做的就是從t集合中不斷選

取與s集合中的點距離最短的並且未被加入s集合中的點,將這個點加入s集合,

並用這個點去更新所有與這個點相鄰的點,重複操作直到所有點都被加入s集合中。

堆優化dij採用堆這種資料結構優化出隊順序,因此時間複雜度較普通dij由n^2降低為nlogn*/

//演算法時間複雜度o(n^2logn),空間複雜度o(m^2)

#includeusing namespace std;

const int maxn=1005;

const int inf=0x3f3f3f3f;

typedef long long ll;

struct edge

e[maxn*maxn];

struct node

friend bool operator

};int head[maxn],num;

int n,m;

int vis[maxn],dis[maxn];

int ans[maxn];

int pre[maxn];

int path[maxn];

void init()

void add(int st,int en,int len)

void dij(int st)

dis[st]=0;

pre[st]=-1;

priority_queueq;

q.push(node(st,0));

while(!q.empty())}}

}int cnt1=0;

void print(int x)

int main()

int cnt=0;

int sum=0;

for(int i=1;i";

else cout關於dij和floyd演算法思想以及詳細演算法步驟參見這位博主:dij演算法和floyd演算法

最短路(dij 優先佇列優化)模板

有n個城市,求s到e的最短路徑 當n的值較小時,直接用 dij 演算法沒有問題,但是當數值較大或者訪問過多時就需要優化 演算法思想 貪心,從起點開始,不斷的尋找不同點到起始點的最短距離 鏈結一篇部落格 新增鏈結描述 include include include include include in...

dij最短路 變形

時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。...

最短路 dij鏈式向前星優先佇列優化

暑假集訓的休息日到了,本想在學校自習的babilong在ly和sun of ice的蠱惑下,被拉去了my的電影院玩遊戲。my共有n個區域,包括學校,電影院和n 2個其他區域,其他區域中都是休息站,休息站中沒有學校和電影院。並且在my有m條道路,每條道路連線a,b兩個區域且通過此條道路需要付出c的 雙...