Cod sursa(job #1111195)

Utilizator StickmanLazar Alexandru Stickman Data 18 februarie 2014 18:20:29
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>

using namespace std;

int n;
int mat[257][257], pasi[257][257];

void rf()
{
    int i,j,k;
    for(k=1; k<=n; k++)
    {
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                if(i!=j)
                    if(mat[i][k]!=0 && mat[k][j]!=0)
                    {
                        if(mat[i][k]+mat[k][j]==mat[i][j])
                            if(pasi[i][k]+1>pasi[i][j])
                                pasi[i][j]=pasi[i][k]+1;

                        if(mat[i][k]+mat[k][j]<mat[i][j] || mat[i][j]==0)
                        {
                            mat[i][j]=mat[i][k]+mat[k][j];
                            pasi[i][j]=pasi[i][k]+1;
                        }

                    }
            }
        }
    }
}

int main()
{
    int i,j;
    ifstream in("royfloyd.in");
    in>>n;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
           {
                in>>mat[i][j];
                if(mat[i][j])
                    pasi[i][j]=1;
           }
    rf();
    ofstream out("royfloyd.out");
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
            out<<mat[i][j]<<" ";
        out<<endl;
    }
    //for(i=1; i<=n; i++)
  //  {
    //    for(j=1; j<=n; j++)
       //     out<<pasi[i][j]<<" ";
     //   out<<endl;
   // }
    out.close();
    return 0;
}