Pagini recente » Cod sursa (job #2893025) | Cod sursa (job #2003753) | Cod sursa (job #2724468) | Cod sursa (job #2913843) | Cod sursa (job #2202756)
#include <bits/stdc++.h>
// Se da un graf orientat cu n noduri, m muchii.
// Sa se afiseze drumurile minime intre doua noduri
using namespace std;
ifstream f ("royfloyd.in");
ofstream g ("royfloyd.out");
int n;
int adiac[1005][1005];
void citire();
void rezolvare() {
/// Iau fiecare nod intermediar cu fiecare nod.
for (int k = 1; k <= n; ++k) {
for (int j = 1; j <= n; ++j) {
for (int i = 1; i <= n; ++i) {
// No, bun.
/// Daca distanta drumului prin k de la i la j
/// e mai mica decat distanta drumului curent de la
/// i la j SI
/// i si j sunt diferiti
if (adiac[i][j] > adiac[i][k] + adiac[k][j] && i != j) {
adiac[i][j] = adiac[i][k] + adiac[k][j];
}
}
}
}
}
void AFISAREMATRICE() {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
g << adiac[i][j] << ' ';
}
g << '\n';
}
}
int main()
{
citire();
rezolvare();
AFISAREMATRICE();
return 0;
}
void citire() {
f >> n;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
f >> adiac[i][j];
}
}
}