Cod sursa(job #1809957)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 19 noiembrie 2016 14:22:54
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define MaxN 105
#define INF 2140000000
#define MAX 131072
using namespace std;

char f[MAX];
int pos=0,sign;
FILE *IN,*OUT;
void Read(int &nr)
{
	nr=0,sign=1;
	while(f[pos]>'9'||f[pos]<'0')
	{
		if(f[pos]=='-')
			sign=-1;
		pos++;
		if(pos==MAX)
			pos=0,fread(f,1,MAX,IN);
	}
	while(f[pos]<='9'&&f[pos]>='0')
	{
		nr=nr*10+f[pos++]-'0';
		if(pos==MAX)
			pos=0,fread(f,1,MAX,IN);
	}
	nr*=sign;
}

int N,v[MaxN][MaxN];
int main()
{
    IN=fopen("royfloyd.in","r");
    OUT=fopen("royfloyd.out","w");
	fread(f,1,MAX,IN);
	
	Read(N);
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
			Read(v[i][j]);
	for(int k=1;k<=N;k++)
		for(int i=1;i<=N;i++)
			for(int j=1;j<=N;j++)
				if(i!=j&&v[i][k]&&v[k][j]&&(!v[i][j]||v[i][j]>v[i][k]+v[k][j]))v[i][j]=v[i][k]+v[k][j];
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<=N;j++)
		{
			fprintf(OUT,"%d ",v[i][j]);
		}
		fprintf(OUT,"\n");
	}
	return 0;
}