Pagini recente » Cod sursa (job #1683689) | Cod sursa (job #2777441) | Cod sursa (job #2900751) | Cod sursa (job #1673843) | Cod sursa (job #3261056)
#include <fstream>
using namespace std;
const int Inf = 1000000000; // Reprezintă infinitul pentru distanțe mari
const int MAX_N = 100; // Dimensiunea maximă a grafului
int c[MAX_N][MAX_N]; // Matricea ponderilor
int main() {
ifstream cin("royfloyd.in");
ofstream cout("royfloyd.out");
int n;
cin >> n;
// Citim matricea ponderilor
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> c[i][j];
if (i != j && c[i][j] == 0) {
c[i][j] = Inf; // Dacă nu există muchie, marcăm cu Inf
}
}
}
// Aplicăm algoritmul Roy-Floyd-Warshall
for (int k = 0; k < n; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (c[i][k] < Inf && c[k][j] < Inf) { // Evităm depășiri numerice
if (c[i][j] > c[i][k] + c[k][j]) {
c[i][j] = c[i][k] + c[k][j];
}
}
}
}
}
// Rezolvăm cazurile fără drum
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (c[i][j] == Inf) {
c[i][j] = 0; // Dacă nu există drum, afișăm 0
}
}
}
// Afișăm matricea drumurilor minime
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << c[i][j] << " ";
}
cout << '\n';
}
return 0;
}