Pagini recente » Cod sursa (job #965021) | Cod sursa (job #913142) | Cod sursa (job #2708348) | Cod sursa (job #2846236) | Cod sursa (job #2596390)
#include <bits/stdc++.h>
#define Dim 101
#define oo 2e9
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int N,A[2][Dim][Dim],T[Dim][Dim][Dim];
int main()
{
f>>N;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
f>>A[0][i][j];
if(i!=j && A[0][i][j]==0) A[0][i][j]=oo;
if(i==j||A[0][i][j]==oo) T[0][i][j]=-1;
else
if(i!=j || A[0][i][j]<oo ) T[0][i][j]=i;
}
for(int k=1;k<=N;k++)
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
if( i != j )
{
if( A[!(k%2)][i][j] <= A[!(k%2)][i][k]+A[!(k%2)][k][j] )
{
A[k%2][i][j]=A[!(k%2)][i][j];
T[k][i][j]=T[k-1][i][j];
}
else
{
A[k%2][i][j]=A[!(k%2)][i][k]+A[!(k%2)][k][j];
T[k][i][j]=T[k-1][k][j];
}
}
//cout<<"Matricea drumurilor minime intre oricare doua perechi de varfuri este: "<<'\n';
for(int i=1;i<=N;i++,g<<'\n')
for(int j=1;j<=N;j++) g<<A[N%2][i][j]<<' ';
return 0;
}