有向图,不可解决边权为负的问题
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e2 + 5;
const int INF = 0x3f3f3f3f;
int main() {
int map[maxn][maxn], n, m, ii, jj;
scanf("%d %d", &n, &m);
memset(map, 0, sizeof(map));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (i != j) map[i][j] = INF;
for (int i = 0; i < m; i++) {
scanf("%d %d", &ii, &jj);
scanf("%d", &map[ii-1][jj-1]);
}
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (map[i][k] < INF && map[k][j] < INF)
map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%d ", map[i][j]);
printf("\n");
}
while (scanf("%d %d", &ii, &jj) != EOF)
printf("%d\n", map[ii-1][jj-1]);
}