Cod sursa(job #2780733)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 7 octombrie 2021 19:18:04
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#define MaxN 105
#define INF 1001
#define MAX 131072

using namespace std;

char f[MAX];
int pos = 0, sign;
FILE *IN, *OUT;

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

int N, v[MaxN][MaxN];

int main() {
    IN = fopen("royfloyd.in", "r");
    OUT = fopen("royfloyd.out", "w");

    fread(f, 1, MAX, IN);

    Read(N);

    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= N; j++) {
            Read(v[i][j]);
            if (v[i][j] == 0)
                v[i][j] = INF;
        }

    for (int k = 1; k <= N; k++)
        for (int i = 1; i <= N; i++)
            for (int j = 1; j <= N; j++)
                if (i != j)
                    v[i][j] = v[i][k] + v[k][j];

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            if (v[i][j] == INF)
                v[i][j] = 0;
            fprintf(OUT, "%d ", v[i][j]);
        }
        fprintf(OUT, "\n");
    }

    return 0;
}