Cod sursa(job #3237352)

Utilizator popescu_georgePopescu George popescu_george Data 8 iulie 2024 15:41:04
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
ifstream F("royfloyd.in");
ofstream G("royfloyd.out");
#define Z 2048
short n,i,j,k,l,a[100][100],p=Z,q,b[5];
char s[Z],t[Z];
inline char A()
{
    if(p==Z)
        F.read(s,Z),p=0;
    return s[p++];
}
short B()
{
    char c;
    for(c=A();!isdigit(c);c=A());
    short n=0;
    for(;isdigit(c);n=n*10+c-48,c=A());
    return n;
}
inline void C()
{
    if(q==Z)
        G.write(t,Z),q=0;
}
int main()
{
    for(n=B();i<n;++i)
        for(j=0;j<n;a[i][j++]=B());
    for(;k<n;++k)
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                if(i!=j&&a[i][k]&&a[k][j]&&(!a[i][j]||a[i][j]>a[i][k]+a[k][j]))
                    a[i][j]=a[i][k]+a[k][j];
    for(i=0;i<n;t[q++]='\n',C(),++i)
        for(j=0;j<n;t[q++]=' ',C(),++j) {
            for(l=a[i][j],k=0,b[k++]=l%10,l/=10;l;b[k++]=l%10,l/=10);
            for(;k;t[q++]=b[--k]+48,C());
        }
    return G.write(t,q),0;
}