Cod sursa(job #1455494)

Utilizator aimrdlAndrei mrdl aimrdl Data 28 iunie 2015 03:38:21
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>

unsigned int ** readMatrix (FILE *in, int *n) {
	fscanf(in, "%d", n);
	
	unsigned int **m = new unsigned int *[*n];
	for (int i = 0; i < *n; ++i) {
		m[i] = new unsigned int [*n];
		for (int j = 0; j < *n; ++j) {
			fscanf(in, "%hu", &m[i][j]);
		}
	}
	
	return m;
}

void royfloyd (unsigned int **m, int n) {
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < n; ++j) {
			for (int k = 0; k < n; ++k) {
				if (m[i][k] && m[k][j]) {
					int s = m[i][k] + m[k][j];
					if (s < m[i][j]) m[i][j] = s;
				}
			}
		}
	}
}

int main (void) {
	FILE *in = fopen("royfloyd.in", "r");
	
	int n;
	unsigned int **m = readMatrix(in, &n);
	fclose(in);
	
	royfloyd(m, n);
	
	FILE *out = fopen("royfloyd.out", "w");
	
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < n; ++j) {
			fprintf(out, "%d ", m[i][j]);
		}
		fprintf(out, "\n");
	}
	
	for (int i = 0; i < n; ++i) {
		delete[] m[i];
	}
	delete[] m;
	
	
	return 0;
}