有重边,wa了半天。
#include <iostream>
using namespace std;
#define N 205
int n, m;
int map[N][N];
int sea[N];
int D[N];
int flag[N];
void floyd()
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
{
if(map[j][i] + map[i][k] < map[j][k])
map[j][k] = map[j][i] + map[i][k];
}
}
void dijkstra()
{
for(int i = 0; i < n; i++)
D[i] = map[0][i];
for(int cnt = 0; cnt < n-1; cnt++)
{
int min = 0x7fffffff;
int index = -1;
for(int i = 0; i < n; i++)
{
if(D[i] < min && flag[i] == 0)
{
index = i;
min = D[i];
}
}
flag[index] = 1;
for(int i = 0; i < n; i++)
{
if(flag[i])
continue;
for(int j = 0; j < n; j++)
{
if(flag[j] == 0)
continue;
if(D[j] + map[j][i] < D[i])
D[i] = D[j] + map[j][i];
}
}
}
}
int main()
{
while(~scanf("%d %d", &n, &m))
{
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
map[i][j] = 0x1fffffff;
for(int i = 0; i < n; i++)
map[i][i] = 0;ni y
int x, y, t;
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &x, &y, &t);
if(t < map[x][y]) //真恶心,重边
map[x][y] = map[y][x] = t;
}
floyd();
scanf("%d %d", &x, &y);
if(map[x][y] < 0x1fffffff)
cout << map[x][y] << endl;
else
cout << "-1" << endl;
}
return 0;
}