Cod sursa(job #1703573)

Utilizator piroslPiros Lucian pirosl Data 17 mai 2016 10:26:22
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>

using namespace std;


void print(int n, int* d, ofstream &out)
{
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<n;++j)
            {
                out << d[i*n+j] << " ";
            }
            out << "\n";
        }
}

int main()
{
    ifstream in("rf.in");
    ofstream out("rf.out");

    int n;
    in >> n;
    int *d = new int[n*n];
    int *mr = new int[n*n];
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
        {
            in >> d[i*n+j];
            mr[i*n+j] = ((i!=j)?1:0);
        }
    }

    for(int k=0;k<n;++k)
    {
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<n;++j)
            {
                if(i!=j && d[i*n+k] + d[k*n+j] == d[i*n+j])
                {
                    if(mr[i*n+j] < mr[i*n+k] + mr[k*n+j])
                        mr[i*n+j] = mr[i*n+k] + mr[k*n+j];
                }
                if(i!=j && d[i*n+k] > 0 && d[k*n+j] > 0 && (d[i*n+k] + d[k*n+j] < d[i*n+j] || d[i*n+j] == 0))
                {
                    d[i*n+j] = d[i*n+k] + d[k*n+j];
                    mr[i*n+j] = mr[i*n+k] + mr[k*n+j];
                }
            }
        }
    }

    //print(n,d,out);
    //print(n,mr,out);
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
        {
            out << d[i*n+j] << " ";
        }
        out << "\n";
    }
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
        {
            out << mr[i*n+j] << " ";
        }
        out << "\n";
    }
    return 0;
}