Cod sursa(job #2117508)

Utilizator lorena1999Marginean Lorena lorena1999 Data 28 ianuarie 2018 21:48:52
Problema Floyd-Warshall/Roy-Floyd Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");

int n, a[101][101];

void citire()
    {
        f>>n;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                f>>a[i][j];
    }

void roy_warshall()
    {
        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    if(i!=j && i!=k && j!=k && a[i][k]*a[k][j]==1)
                        a[i][j]=1;
    }

void roy_floyd()
    {
        int inf=9999999;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(a[i][j]==0)
                    a[i][j]=inf;
        for(int i=1; i<=n; i++)
    {
        /*for(int j=1; j<=n; j++)
            cout<<a[i][j]<<" ";
        cout<<endl;*/
    }
    //cout<<endl;
        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    if(a[i][j]>a[i][k]+a[k][j] && i!=j)
                        {
                            a[i][j]=a[i][k]+a[k][j];
                            //cout<<i<<" "<<j<<" "<<k<<endl;
                        }
                    else if(i==j)
                        a[i][j]=0;

    }

int main()
{
    citire();
    roy_warshall();
    /*for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;*/
    roy_floyd();
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            g<<a[i][j]<<" ";
        g<<endl;
    }

}