Pagini recente » Cod sursa (job #695925) | Cod sursa (job #1309618) | Cod sursa (job #2213831) | Cod sursa (job #1700560) | Cod sursa (job #1342756)
#define inf 10000
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int n,c[50][50],pred[50][50];
void citire()
{
f>>n;
for(int i=1; i<n; i++)
for(int j=i+1; j<=n; j++)
c[i][j]=c[j][i]=inf;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
f>>c[i][j];
if(c[i][j]>0)
pred[i][j]=i;
}
}
}
void Roy_Floyd()
{
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(c[i][j]>c[i][k]+c[k][j])
{
c[i][j]=c[i][k]+c[k][j];
pred[i][j]=pred[k][j];
}
}
void afis_drum(int i,int j)
{
if(i==j)
{
g<<i<<" ";
return;
}
afis_drum(i,pred[i][j]);
g<<j<<" ";
}
void afisare()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(i==j || c[i][j]==inf)
g<<"Nu exista drum de la "<<i<<" la "<<j<<endl;
else
{
g<<"Costul de la "<<i<<" la "<<j;
g<<" este: "<<c[i][j];
g<<" si drumul este: ";
afis_drum(i,j);
g<<endl;
}
}
int main()
{
citire();
Roy_Floyd();
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
g<<c[i][j]<<' ';
g<<endl;
}
//afis_drum(1,2);
return 0;
}