Floyd (多源最短路径)
const int INF = 0x3f3f3f3f;
vector<vector<int> > dist;
vector<vector<int> > graph;
int n;
int m;
int u;
int v;
int w;
void floyd(vector<vector<int> > graph) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dist[i][j] = graph[i][j];
}
}
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
}
void init() {
ifstream infile("in.txt", ios::in);
if (!infile.is_open()) {
cout << "file opened fail" << endl;
}
infile >> n >> m;
graph.resize(n, vector<int> (n, INF));
dist.resize(n, vector<int> (n, INF));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j)
graph[i][j] = 0;
}
}
for (int j = 0; j < m; j++) {
infile >> u >> v >> w;
graph[u][v] = w;
}
infile.close();
}
void print() {
ofstream outfile("out.txt", ios::out);
for (int i = 0; i < n ;i++) {
for (int j = 0; j < n; j++) {
outfile << dist[i][j] << " ";
}
outfile << endl;
}
outfile.close();
}
int main() {
init();
floyd(graph);
print();
return 0;
}