模板总结归纳:
//Floyd-Warshall
//O(n^3)
/*const int MaxN = 111;
const int INF = 1 << 9;
int N, g[MaxN][MaxN];
void floyd()
{
for(int k = 1; k <= N; k++)
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
return;
}*/
实战模板题 :HDU 1874 畅通工程
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MaxN = 10005;
const int INF = 10000005;
int g[MaxN][MaxN], N, M;
bool v[MaxN];
void floyd()
{
for(int k = 1; k <= N; k++)
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
return;
}
int main()
{
while(cin >> N >> M)
{
int a, b, x;
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
{
if(i == j) g[i][j] = 0;
else g[i][j] = INF;
}
for(int i = 1; i <= M; i++)
{
cin >> a >> b >> x;
if(g[a + 1][b + 1] > x)
{
g[a + 1][b + 1] = x;
g[b + 1][a + 1] = x;
}
}
cin >> a >> b;
floyd();
if(g[b + 1][a + 1] == INF)
cout << "-1" << endl;
else
cout << g[b + 1][a + 1] << endl;
}
return 0;
}