Cod sursa(job #1814960)

Utilizator ZeratulVeress Szilard Zeratul Data 24 noiembrie 2016 18:14:15
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

int n;
short t[101][101];
int solve[101][101];

queue <short> c;

/// OTLET: DIJKSTRA N-SZER.

void torol()
{
    while(!c.empty())
        c.pop();
}

void kiir()
{

}

int main()
{
    ifstream be("royfloyd.in");
    ofstream ki("royfloyd.out");
    be>>n;

    for(int i = 1; i <= n;i++)
    {
        for(int j = 1; j <= n;j++)
        {
            be>>t[i][j];
            solve[i][j] = 2000000000;
        }
    }

    for(int q = 1; q <= n;q++)
    {
        c.push(q);
        solve[q][q] = 0;
        while(!c.empty())
        {
            short now = c.front();
            c.pop();
            if(now < q)
            {
                for(int i = 1;i<=n;i++)
                {
                    if(solve[q][now] + solve[now][i] < solve[q][i] and solve[now][i] > 0)
                    {
                        solve[q][i] = solve[q][now] + solve[now][i];
                    }
                }
                solve[q][q] = 0;
            }
            else
            {
                for(int i = 1; i<= n;i++)
                {
                    if(t[now][i] and solve[q][now] + t[now][i] < solve[q][i])
                    {
                        solve[q][i] = solve[q][now] + t[now][i];
                        c.push(i);
                    }
                }
            }
        }
        torol();
    }
    for(int i = 1; i<= n;i++)
    {
        for(int j = 1;j <= n;j++)
        {
            ki<<solve[i][j]<<" ";
        }
        ki<<endl;
    }
    //kiir();


    return 0;
}