Pagini recente » Cod sursa (job #552749) | Cod sursa (job #2162585) | Cod sursa (job #769154) | Cod sursa (job #581048) | Cod sursa (job #2483866)
#include <fstream>
#include <vector>
#define INF 1<<20
using namespace std;
vector<vector<int>> init_dist_mat(int n) {
vector<vector<int>> mat;
for (int i = 0; i < n; ++i) {
vector<int> aux;
for (int j = 0; j < n; ++j)
aux.push_back(INF);
mat.push_back(aux);
}
return mat;
}
vector<vector<int>> read_mat(ifstream &f, int n) {
int x;
vector<vector<int>> d;
for (int i = 0; i < n; ++i) {
vector<int> aux_d;
for (int j = 0; j < n; ++j) {
f >> x;
aux_d.push_back(x == 0 ? INF : x);
}
d.push_back(aux_d);
}
return d;
}
void write_mat(ofstream &g, vector<vector<int>> mat) {
for (int i = 0; i < mat.size(); ++i) {
for (int j = 0; j < mat[i].size(); ++j)
g << (i == j || mat[i][j] == INF ? 0 : mat[i][j]) << " ";
g << "\n";
}
}
void floyd_warshall(vector<vector<int>> &d) {
// Initialize distance matrix
int n = d.size();
for (int k = 0; k < n; ++k)
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
int main() {
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int n;
vector<vector<int>> d;
// Read input data
f >> n;
d = read_mat(f, n);
// Perform Floyd-Warshall algo
floyd_warshall(d);
// Write result
write_mat(g, d);
return 0;
}