Cod sursa(job #3296895)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 18 mai 2025 13:50:55
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");


const int NMAX = 1e3;
int d[NMAX + 1][NMAX + 1];
//d[i][j] = distanta minima de la i la j


int main() {
	int n;
	f >> n;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= n; j++) {
			f >> d[i][j];
			if(d[i][j] == 0 && i != j) {
				d[i][j] = 1e9;
			}
		}
	}
	for(int k = 1; k <= n; k++) {
		//la pasul k: d[i][j] = distanta minima de la i la j
		//daca putem folosi ca noduri intermediare nodurile din multimea {1, 2, ..., 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(d[i][j] == 1e9) {
				g << 0 << ' ';
			} else {
				g << d[i][j] << ' ';
			}
		}
		g << '\n';
	}
	return 0;
}