鄰接矩陣 最短路徑演算法

2022-06-03 20:00:13 字數 3040 閱讀 6458

floyd演算法:

思路 :遍歷計算 i 點 經過 k 點 到 j 點 的最小路徑值 (動態規劃思路)

缺點:時間複雜度高,不能解決負邊情況

輸入樣例:

4 81 2 2

1 3 6

1 4 4

2 3 3

3 1 7

3 4 1

4 1 5

4 3 12

輸出樣例:

1-->2:2

1-->3:5

1-->4:4

2-->1:9

2-->3:3

2-->4:4

3-->1:6

3-->2:8

3-->4:1

4-->1:5

4-->2:7

4-->3:10

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int inf=0x7fffff

;const

long

long mod=1e9+7

;const

double pi=acos(-1

);int

n,m,start,end;

int ans=9999999

;bool vis[105

];int e[105][105

];void init()

}} void floyd()}}

}}int

main()

floyd();

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

} return0;

}

dijkstra演算法:

思路:依此找起點可達的點的最小值點。通過最小值點再訪問其他點。不斷更新最小距離。

測試資料:

6 9 1         (6個點9條邊 1為起點)

1 2 1

1 3 12

2 3 9

2 4 3

3 5 5

4 3 4

4 5 13

4 6 15

5 6 4

輸出資料:

1-->1:0

1-->2:1

1-->3:8

1-->4:4

1-->5:13

1-->6:17

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int inf=0x7fffff

;const

long

long mod=1e9+7

;const

double pi=acos(-1

);int

n,m,start,end;

int ans=9999999

;bool vis[105

];int e[105][105

];void init()

}} void dijkstra(int s)

vis[s]=1

;

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

}vis[minp]=1; //

設定訪問

for(int v=1;v<=n;v++)}}

}for(int i=1;i<=n;i++)

}int

main()

dijkstra(s);

//s 為起點

return0;

}

bellman_floyd演算法:

思路:經過n-1次迭代,判斷每次迭代判斷能不能用u[i]-->v[i]

使源點到v[i]的最短路徑變短。

優點:可以解決帶負邊的問題。

輸入樣例:

5 5 1 (5個點 5條邊 起點1)

2 3 2

1 2 -3

1 5 5

4 5 2

3 4 3

輸出樣例:

0 -3 -1 2 4 (起點到各個點的最短路徑)

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int inf=999999;//

0x7fffff

const

long

long mod=1e9+7

;const

double pi=acos(-1

);int

n,m;

int ans=9999999

;bool vis[105

];int dis[105],u[105],v[105],w[105

];void bellman_floyd(int

s) }

//bool ok=0;

//for(int k=1;k<=m;k++)

}int

main()

bellman_floyd(s);

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

return0;

}

最短路徑 鄰接矩陣

思路 先記錄1到所有點的距離 沒有連線記為無窮大 為到達該點的最短路徑長,然後從1開始利用貪心思想依次找出到下乙個連線點的最短距離,然後再找以該點為基準的下乙個距離最近的點,判斷從1先到乙個點再到該點的距離與從1直接到該點距離的大小,若小,則更新dis距離長,否則不更新 若不理解,建議看看簡單易懂 ...

Dijkstra最短路徑演算法鄰接矩陣版

模板參考kuangbin 資料結構方面 includeusing namespace std const int maxn 1010 const int inf 0x3f3f3f3f bool vis maxn int pre maxn 記錄beg到i路徑上的父結點 pre beg 1 int co...

最短路徑之Dijkstra演算法(鄰接矩陣實現)

單源最短路徑 就是從某乙個頂點出發,到圖中任意頂點之間的最短路徑 演算法概述 dijkstra演算法適用於解決單源最短路徑的問題。即 從源點到任意指定頂點之間的最短距離的問題 但dijkstra演算法要求所有邊的權值非負。看過prime演算法的同學都知道,dijkstra演算法與prime演算法很相...