Dijkstra演算法 例題

2021-10-20 15:37:33 字數 1550 閱讀 8170

dijkstra演算法

從起點到終點求最短路 — 使用要求權值為正

1、求短路i

//題目 點數 500  邊數  1e5 

#include

#include

#include

using

namespace std;

const

int n =

510,m =

1e5+10;

//時間複雜度o(n^m)

int n,m;

//鄰接矩陣

int a[n]

[n];

bool vis[n]

;//記錄已經遍歷的點

//記錄起點到某點的最短路徑

int d[n]

;int

dijkstra()

} vis[t]

=true

;for

(int j=

1;j<=n;

++j)}if

(d[n]

>=

0x3f3f3f3f

)return-1

;return d[n];}

intmain()

cout<<

dijkstra()

;return0;

}

2、求最短路ii

資料範圍 1e5 時間複雜度o(n^2) 超時!

優化思路:

1、迴圈每個點

2、每次找距離起點最短距離的點

3、進行更新

採用優先佇列 優化2

採用鄰接表 優化3

優化後時間複雜度 o(mlogn)

#include

#include

#include

#include

using

namespace std;

const

int n =

1e6;

int n,m;

int d[n]

;bool vis[n]

;typedef pair<

int,

int>pii;

//構建鄰接表

int e[n]

,ne[n]

,w[n]

,h[n]

,idx;

void

add(

int a,

int b,

int c)

intdijkstra()

);//距離 結點

while

(q.size()

));}

}}if(d[n]

>=

0x3f3f3f3f

)return-1

;return d[n];}

intmain()

cout<<

dijkstra()

;return0;

}

模擬演算法例題

一 火柴棒 題目描述 給你n根火柴棍,你可以拼出多少個形如 a b c 的等式?等式中的a b c是用火柴棍拼出的整數 若該數非零,則最高位不能是0 用火柴棍拼數字0 9的拼法如圖所示 注意 1 加號與等號各自需要兩根火柴棍 2 如果a b,則a b c與b a c視為不同的等式 a b c 0 3...

manacher演算法 例題

簡單而有通俗的講解,講的太好了 證明對於一些我的理解,我會以 注釋的形式寫在 裡,我不懶 char str maxn char temp maxn 1 10 擴充套件後的字串 int len maxn 1 10 擴充套件後字串第i個位置回文串從中間到第有邊界的長度 相當於 回文子串長度 2 1 在用...

遞推演算法例題

例1 植樹節那天,有五位同學參加了植樹活動,他們完成植樹的棵樹都不相同,問第一位同學植了多少棵樹時,他指著旁邊的第二位同學說比他多植了兩棵 追問第二位同學他又說比第三位同學多植了兩棵,如此追問,都說比另一位同學多植兩棵。最後問道第五位同學時,他說自己種了10棵,問第一位同學植了多少棵?分析 設第一位...