wenbao與最短路(Floyd)

2022-04-17 04:35:58 字數 2126 閱讀 4233

floyd演算法堪稱經典。僅僅五行**就可以求出多源最短路,建議好好思考為什麼可以這樣求

注意點:中轉點k在最外層迴圈,這樣可以確保【i】【k】,【k】【j】最小 

1

for k = 1

.. n

2for i = 1

.. n

3for j = 1

.. n

4若i, j, k各不相同

5 mindistance[i, j] = min

1

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

floyd求任兩點之間的最短路徑

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

3for(int j=1; j<=n; j++)

4 a[i][j] = min(a[i][j], a[i][k] + a[k][j]);

膜拜大神:

1

for (k = 1; k <= n; ++k) for (j = 2; j <= n; ++j)

7}

矩陣對角優化,下三角,不存在路徑優化,數學函式優化

1

void

floyd()

13for (int j = k + 1; j < i; j++) 17}

18}19}

20 }

1 #include 2 #include 3 #include 4

using

namespace

std;

5#define inf 123456789

6long

long a[1005][1005]; //

任意兩點間的最短路徑長度78

intmain()

17for(int i=1; i<=m; i++)

2122

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

floyd求任兩點之間的最短路徑

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

24for(int j=1; j<=n; j++)

25 a[i][j] = min(a[i][j], a[i][k] +a[k][j]);

2627

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

33 printf("\n"

);34}35

}36return0;

37 }

大神**

1 #include 2 #include 

3int edge[101][101];4

intmain()515

for (k = 1; k <= n; ++k)

16for (j = 2; j <= n; ++j)

1725

}26 edge[1][1] = 0;27

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

2833

return0;

34 }

1 #include "

iostream

"2 #include 3

using

namespace

std;45

const

int maxn = 111;6

inta[maxn][maxn], n, m, x, y, z;

7#define inf 1e989

void

floyd()

21for (int j = k + 1; j < i; j++) 25}

26}27}

28}2930

intmain() 39}

40for(int i = 0; i < m; ++i)

44floyd();

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

50return0;

51 }

只有不斷學習才能進步!

wenbao與最短路(spfa)

spfa就是利用鄰接表和佇列進行優化的最短路!牛!利用spfa判斷圖中的負環 如果乙個點入隊次數超過n則存在負環 1 include 2 include 3 include 4 include 5 using namespace std 6const int maxn 1010 7 int n,m,...

JavaScript與Floyd最短路演算法

nba超級後場組合燈泡組合 harden和cp3 休賽期來到中國玩耍,他們兩人打算在四個城市進行玩耍,最後他們選擇了北京 上海 西安和長沙。假設這四個城市之間有些城市之前有航線,而有些城市之間沒有航線。為了方便行程,出發前,他們想要知道任意兩個城市之間的最短路程。如果下圖就是航線圖 我們使用乙個二維...

wenbao與多源多匯最短路

求多個起點多個終點的最短路,與dij求單源最短路相似,將起點集push進入優先佇列,終點集標記,最先遇到的就是最短路 在乙個集合中找出兩個點距離最短,二進位制列舉起點集與終點集,目的是使每個點與其他點不再乙個集合當中 巧妙利用二進位制位實現 1 include 2 include 3 include...