Pagini recente » Cod sursa (job #2828980) | Cod sursa (job #295725) | Cod sursa (job #1396381) | Cod sursa (job #3286348) | Cod sursa (job #985658)
Cod sursa(job #985658)
#include <fstream>
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int i, j, k, n, w[101][101];
int main ()
{
f >> n;
for(i = 1; i <= n; ++ i)
for(j = 1; j <= n; ++ j)
{
f >> w[i][j];
}
/// MinDist(i, j, 0) = w[i][j]
/// MinDist(i, j, k + 1) = min( MinDist(i, j, k), MinDist(i, k + 1, k) + MinDist(k + 1, j, k) )
for(k = 1; k <= n; ++ k)
/// cea mai mica distanta intre nodurile i si j folosind k muchii
for(i = 1; i <= n; ++ i)
for(j = 1; j <= n; ++ j)
/// nodurile trebuie sa fie distincte
/// sa existe muchie intre (i, k) si (k, j) pentru a se putea actualiza drumul minim
/// sa se incerce gasirea unui drum in cazul in care nu exista drum direct (i, j)
if( i != j && w[i][k] && w[k][j] && (w[i][k] + w[k][j] < w[i][j] || !w[i][j]) )
w[i][j] = w[i][k] + w[k][j];
for(i = 1; i <= n; ++ i)
{
for(j = 1; j <= n; ++ j)
g << w[i][j] << " ";
g << "\n";
}
return 0;
}