Cod sursa(job #2498319)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 23 noiembrie 2019 19:37:55
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
#define MAX 131072

using namespace std;
const int NMAX = 101;

FILE *IN;

int N;
int mat[NMAX][NMAX];

int pos, sign;
char f[MAX];

inline void Read(int &nr){
    sign = 0;
    nr = 0;
    while(f[pos] < '0' || f[pos] > '9'){
        if(f[pos] == '-') sign = 1;
        pos++;
        if(pos == MAX)
            fread(f, MAX, 1, IN), pos = 0;
    }
    while(f[pos] >= '0' && f[pos] <= '9'){
        nr = 10 * nr + f[pos++] - '0';
        if(pos == MAX)
            fread(f, MAX, 1, IN), pos = 0;
    }
    if(sign) nr =- nr;
}

void read(){
    Read(N);;
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= N; j++){
            Read(mat[i][j]);
            if(!mat[i][j])
                mat[i][j] = 2e9;
        }
}

int main(){

    IN = fopen("royfloyd.in", "r");
    freopen("royfloyd.out", "w", stdout);

    read();

    for(int k = 1; k <= N; k++)
        for(int i = 1; i <= N; i++)
            for(int j = 1; j <= N; j++)
                if(mat[i][k] + mat[k][j] < mat[i][j] && mat[i][k] != 2e9 && mat[k][j] != 2e9 && i != j)
                    mat[i][j] = mat[i][k] + mat[k][j];

    for(int i = 1; i <= N; i++){
        for(int j = 1; j <= N; j++)
            if(mat[i][j] != 2e9)
                printf("%d ", mat[i][j]);
            else printf("0 ");
        printf("\n");
    }

    return 0;
}