Cod sursa(job #1771207)

Utilizator ZeratulVeress Szilard Zeratul Data 5 octombrie 2016 13:05:20
Problema Floyd-Warshall/Roy-Floyd Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

#define FOR(i,k,v) for(i = k;i<=v;i++)

using namespace std;

int n,q,i,j,p;
int Nq;
int t[101][101];

ofstream ki("royfloyd.out");

void kiir()
{
    int i,j;
    FOR(i,1,n)
        {
            FOR(j,1,n)
            ki<<t[i][j]<<" ";
            ki<<"\n";
        }
}

int log2(int n)
{
    int s = 1;
    if(n/2)
    {
        n = n/2;
        s++;
    }
    return s;
}

int main()
{
    ifstream be("royfloyd.in");

    be>>n;
    Nq = log2(n);
    FOR(i,1,n)
        FOR(j,1,n)
            be>>t[i][j];

    FOR(q,1,n/2 - 10)
    {
        FOR(i,1,n)
            FOR(j,1,n)
            if(i != j)
            {
                int MIN;
                if(t[i][j] == 0)
                    MIN = 200000000;
                else
                    MIN = t[i][j];
                FOR(p,1,n)
                if(t[i][p] and t[p][j])
                {
                    if(MIN > t[i][p] + t[p][j])
                    {
                        //cout<<i<<" "<<j<<" "<<p<<endl;
                        MIN = t[i][p] + t[p][j];
                    }
                }
                t[i][j] = MIN;
            }
           /*ki<<q<<endl;
            kiir();
            ki<<endl<<endl;*/
    }

    kiir();




    return 0;
}