Cod sursa(job #2347793)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 19 februarie 2019 09:23:26
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>
const int M=2000000;
int d[101][101],t,l;
char n,i,j,k,p[M];
int A()
{
  	int s=0;
  	for(;p[t]<'0'||p[t]>'9';t++);
  	for(;p[t]>='0'&&p[t]<='9';t++)
  		s=s*10+p[t]-'0';
  	return s;
}
void S(int b)
{
	if(b<10)
        p[l++]=b+48;
    else if(b<100)
        p[l++]=b/10+48,p[l++]=b%10+48;
    else if(b<1000)
        p[l++]=b/100+48,p[l++]=(b/10)%10+48,p[l++]=b%10+48;
    else
        p[l++]=49,p[l++]=48,p[l++]=48,p[l++]=48;
	p[l++]=' ';
}
int main()
{
    freopen("royfloyd.in","r",stdin),freopen("royfloyd.out","w",stdout),fread(p,1,M,stdin),n=A();
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            d[i][j]=A();
    for(k=0;k<n;k++)
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                if(i!=j&&d[i][k]&&d[k][j]&&(!d[i][j]||d[i][j]>d[i][k]+d[k][j]))
                    d[i][j]=d[i][k]+d[k][j];
    for(k=i=0;i<n;i++,p[l++]='\n')
        for(j=0;j<n;j++)
            S(d[i][j]);
    fwrite(p,1,l,stdout);
}