Cod sursa(job #2651254)

Utilizator AACthAirinei Andrei Cristian AACth Data 21 septembrie 2020 21:12:26
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
#define Nmax 105
#define inf INT_MAX
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int n;
int sol[Nmax][Nmax];
vector < pair < int , int > > v[Nmax];
void afis(){
int i,j;
for(i=1;i<=n;i++){
    for(j=1;j<=n;j++)
        g<<sol[i][j]<<' ';
    g<<'\n';
}
}
priority_queue < pair < int , int > > pq;
void solve(int line)
{
    sol[line][line]=0;
    pq.push({0,line});
    while(!pq.empty())
    {
     int nod = pq.top().second;
     //cout<<nod;
    pq.pop();
    for(auto entity : v[nod])
    {
        int nod_m = entity.first;
        int cost  = entity.second;
        if(sol[line][nod_m] > sol[line][nod] + cost)
        {
            sol[line][nod_m] = sol[line][nod] + cost;
            pq.push({-sol[line][nod_m],nod_m});
        }
    }
    }
}
int main()
{
    f>>n;
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
    {
        int x; f>>x;
        if(x)
        {
            v[i].push_back({j,x});
          //  v[j].push_back({i,x});
        }
        sol[i][j]=inf;
    }
for(i=1;i<=n;i++)
    solve(i);

  afis();
    return 0;
}