floyd演算法堪稱經典。僅僅五行**就可以求出多源最短路,建議好好思考為什麼可以這樣求
注意點:中轉點k在最外層迴圈,這樣可以確保【i】【k】,【k】【j】最小
1for k = 1
.. n
2for i = 1
.. n
3for j = 1
.. n
4若i, j, k各不相同
5 mindistance[i, j] = min
1for(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]);
膜拜大神:
1for (k = 1; k <= n; ++k) for (j = 2; j <= n; ++j)
7}
矩陣對角優化,下三角,不存在路徑優化,數學函式優化
1void
floyd()
13for (int j = k + 1; j < i; j++) 17}
18}19}
20 }
1 #include 2 #include 3 #include 4using
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 #include3int 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...