Cod sursa(job #3136795)

Utilizator Uriesu_IuliusUriesu Iulius Uriesu_Iulius Data 8 iunie 2023 17:15:03
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>

using namespace std;

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

const int mxN = 105, inf = 1e9;
int n, d[mxN][mxN];

void readInput() {
	fin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			fin >> d[i][j];
			if (i != j && d[i][j] == 0) {
				d[i][j] = inf;
			}
		}
	}
}

void floydWarshall() {
	for (int k = 1; k <= n; k++) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (d[i][k] + d[k][j] < d[i][j]) {
					d[i][j] = d[i][k] + d[k][j];
				}
			}
		}
	}

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (i != j && d[i][j] == inf) {
				d[i][j] = 0;
			}
		}
	}
}

int main() {

	readInput();
	floydWarshall();
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			fout << d[i][j] << " ";
		}
		fout << "\n";
	}
	return 0;
}