Pagini recente » Cod sursa (job #558848) | Cod sursa (job #3001469) | Cod sursa (job #267350) | Cod sursa (job #2749418) | Cod sursa (job #985641)
Cod sursa(job #985641)
#include <fstream>
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int i, j, k, n, w[101][101], d[101][101];
int main ()
{
f >> n;
for(i = 1; i <= n; ++ i)
for(j = 1; j <= n; ++ j)
{
f >> w[i][j];
if(i == j)
d[i][j] = 0;
else
d[i][j] = 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] && (d[i][k] + d[k][j] < d[i][j] || !w[i][j]) )
d[i][j] = d[i][k] + d[k][j];
for(i = 1; i <= n; ++ i)
{
for(j = 1; j <= n; ++ j)
g << d[i][j] << " ";
g << "\n";
}
return 0;
}