Pagini recente » Borderou de evaluare (job #573208) | Cod sursa (job #909454) | Borderou de evaluare (job #2020243) | Cod sursa (job #1543907) | Cod sursa (job #3233237)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = 10000; // Valoare mare pentru inițializarea distanțelor
int main() {
ifstream infile("royfloyd.in");
ofstream outfile("royfloyd.out");
if (!infile || !outfile) {
cerr << "Error opening file" << endl;
return 1;
}
int N;
infile >> N;
vector<vector<int>> dist(N, vector<int>(N));
// Citim matricea inițială a ponderilor
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
infile >> dist[i][j];
if (dist[i][j] == 0 && i != j) {
dist[i][j] = INF; // Inițializăm cu INF dacă nu există muchie și nu este diagonală principală
}
}
}
// Aplicăm algoritmul Roy-Floyd
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];
}
}
}
}
// Înlocuim valorile INF cu 0 pentru a semnifica absența unei muchii
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (dist[i][j] == INF) {
dist[i][j] = 0;
}
}
}
// Scriem matricea distanțelor minime în fișierul de ieșire
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
outfile << dist[i][j] << " ";
}
outfile << endl;
}
infile.close();
outfile.close();
return 0;
}