Cod sursa(job #1228761)

Utilizator t.g.g.tt.g.g.t t.g.g.t Data 15 septembrie 2014 14:42:47
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>

using namespace std;

int n,sol[105][105][2];

int main()
{
    freopen("royfloyd.in","r",stdin);
    freopen("royfloyd.out","w",stdout);

    scanf("%d",&n);

    for (int i=1;i<=n;++i)
    {
        for (int j=1;j<=n;++j)
        {
            scanf("%d",&sol[i][j][0]);
        }
    }

    for (int k=1;k<=n;++k)
    {
        int pas1,pas2;
        pas1=k%2;
        pas2=(k+1)%2;
        for (int i=1;i<=n;++i)
        {
            for (int j=1;j<=n;++j)
            {
                if (i!=j)
                {
                    sol[i][j][pas1]=sol[i][j][pas2];
                    if (sol[i][k][pas2]!=0 && sol[k][j][pas2]!=0) if (sol[i][k][pas2]+sol[k][j][pas2]<sol[i][j][pas1] || sol[i][j][pas1]==0) sol[i][j][pas1]=sol[i][k][pas2]+sol[k][j][pas2];
                }
            }
        }
    }

    int pas=n%2;

    for (int i=1;i<=n;++i)
    {
        for (int j=1;j<=n;++j)
        {
            printf("%d ",sol[i][j][pas]);
        }
        printf("\n");
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}