Cod sursa(job #3202395)

Utilizator LilGoatCalin Andrei Cristian LilGoat Data 11 februarie 2024 14:31:15
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
    using namespace std;

    ifstream in("royfloyd.in");
    ofstream out("royfloyd.out");
    vector<int> a[110];
    int v[110][110],c[110][110],s;
    queue<int> q;
    int i,j,k,n,x;
    void parcurgere()
    {
        int d,s,f;
        while(!q.empty()){
            d=q.front();
            q.pop();
            for(auto b:a[d]){
                for(k=1;k<=n;k++)
                    if(c[d][b]>c[k][b]+c[d][k]||c[d][b]==INT_MAX)
                        if(c[k][b]!=INT_MAX&&c[d][k]!=INT_MAX)
                            c[d][b]=c[k][b]+c[d][k];
            }
        if(d<n)
            q.push(d+1);
        }
    }
    int main()
    {
        in>>n;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++){
                in>>x;
                c[i][j]=x;
                a[i].push_back(j);
        }
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                if(i!=j&&c[i][j]==0)
                    c[i][j]=INT_MAX;
        for(i=1;i<=n;i++){
            sort(a[i].begin(),a[i].end());
        }
        q.push(1);
        parcurgere();
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++)
                out<<c[i][j]<<" ";
            out<<endl;
        }
    }