Cod sursa(job #143949)

Utilizator GulyanAlexandru Gulyan Data 26 februarie 2008 23:02:11
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>  
#include<stdio.h> 

using namespace std; 

long c[100][100];
int N;

#define INF -1

long suma(long a,long b)
{
	if(a==INF||b==INF)return INF;
	return a+b;
}

long maimic(long a, long b)
{
	if(a==INF)return 0;
	if(b==INF)return 1;
	return a<b;
}

void royfloyd()
{
	int i,j,k;
	for(k=0;k<N;k++)
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
				if(maimic(suma(c[i][k],c[k][j]),c[i][j]))
					c[i][j] = suma(c[i][k],c[k][j]);
}

int main()   
{   
ifstream f1("royfloyd.in"); 
ofstream f2("royfloyd.out");    

int i,j;
f1>>N;
for(i=0;i<N;i++)
	for(j=0;j<N;j++)
	{
		f1>>c[i][j];
		if(!c[i][j]&&i!=j)c[i][j]=INF;
	}


royfloyd();

for(i=0;i<N;i++)
{
	for(j=0;j<N;j++)
		f2<<c[i][j]<<' ';
	f2<<'\n';
}

f1.close();
f2.close();

return 0;}