Cod sursa(job #2018749)

Utilizator Rishab_aroraRishab Arora Rishab_arora Data 5 septembrie 2017 21:03:18
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include<bits/stdc++.h>
using namespace std;
#define lli long long int
const lli mod=1e9+7;
const lli pINF=LLONG_MAX;
const lli nINF=-LLONG_MAX;
void fast() {std::ios::sync_with_stdio(false);cin.tie(NULL);}
lli power(lli a,lli b){lli ans=1;while(b!=0){ if(b%2==1){ans*=a;}b/=2;a*=a;} return ans;}
lli invmod(lli a) {return pow(a,mod-2);}
#define vi vector<int>
#define vlli vector<lli>
#define pb push_back
#define mp make_pair
#define F first
#define INT 1000000000
#define S second
#define si(n) scanf("%d",&n)
#define sli(n) scanf("%lld",&n)
#define printi(n) printf("%d\n",n)
#define printli(n) printf("%lld\n",n)
#define all(v) v.begin(),v.end()
#define forn(i,n) for(int i=0;i<n;i++)
void print(int a[],int n){for(int i=0;i<n;i++) cout<<a[i]<<" ";}
int dist[105][105];
int a[105][105];

int main()
{
    ifstream fin("royfloyd.in");
    ofstream fout("royfloyd.out");

    int n;
    fin>>n;

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            fin>>a[i][j];
        }
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            dist[i][j]=a[i][j];
            if(!dist[i][j]) dist[i][j]=INT;
        }
    }

    for(int k=0;k<n;k++){        // intermediate vertex
        for(int i=0;i<n;i++){
            if(i!=k){// source vertex
            for(int j=0;j<n;j++){       //destination vertex
                if(j!=k && i!=j){
                if(dist[i][k]+dist[k][j]<dist[i][j]){
                    dist[i][j]=dist[i][k]+dist[k][j];
                }
                }
            }
            }
        }
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(dist[i][j]>=INT) fout<<"0 ";
            else fout<<dist[i][j]<<' ';
        }
        fout<<'\n';
    }
    return 0;
}