Cod sursa(job #1813508)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 22 noiembrie 2016 23:36:57
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia7-grafuri Marime 1.2 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;
}