Cod sursa(job #2378680)

Utilizator Silviu.Stancioiu@gmail.comSilviu Stancioiu [email protected] Data 12 martie 2019 15:42:11
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

#define MAX_N 105

FILE* fin;
FILE* fout;

int n;
int distances[MAX_N][MAX_N];

void RoyFloyd()
{
	int k, i, j;

	for (k = 1; k <= n; k++)
	{
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
			{
				if (i != j && i != k && j != k)
				{
					if (distances[i][k] && distances[k][j])
					{
						int newDist = distances[i][k] + distances[k][j];
						if (newDist < distances[i][j])
							distances[i][j] = newDist;
					}
				}
			}
		}
	}
}

int main(void)
{
	int i, j;

	fin = fopen("royfloyd.in", "r");
	fout = fopen("royfloyd.out", "w");

	fscanf(fin, "%d", &n);

	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
		{
			fscanf(fin, "%d", &distances[i][j]);
		}
	}

	RoyFloyd();

	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			fprintf(fout, "%d ", distances[i][j]);
		}
		fprintf(fout, "\n");
	}

	fclose(fin);
	fclose(fout);

	return 0;
}