Cod sursa(job #294649)

Utilizator whiskeyOzzy Osbourne whiskey Data 2 aprilie 2009 18:07:01
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>

int n;
int a[101][101];

void read();
void solve();
void write();

int main()
{
	read();
	solve();
	write();
	return 0;
}

void solve()
{
	int i, j, k, tmp;
	for (k = 1; k <= n; ++k)
	{
		for (i = 1; i <= n; ++i)
		{
			if (a[i][k])
			{
				tmp = a[i][k];
				for (j = 1; j <= n; ++j)
				{
					if (i != j && a[k][j] && (a[i][j] == 0 || a[i][j] > tmp + a[k][j]))
					{
						a[i][j] = tmp + a[k][j];
					}
				}
			}
		}
	}
}

void write()
{
	int i, j;
	FILE *fout = fopen("royfloyd.out", "w");
	for (i = 1; i <= n; ++i)
	{
		for (j = 1; j <= n; ++j)
		{
			fprintf(fout, "%d ", a[i][j]);
		}
		fprintf(fout, "\n");
	}
	fclose(fout);
}

void read()
{
	int i, j;
	FILE *fin = fopen("royfloyd.in", "r");
	fscanf(fin, "%d", &n);
	for (i = 1; i <= n; ++i)
	{
		for (j = 1; j <= n; ++j)
		{
			fscanf(fin, "%d", &a[i][j]);
		}
	}
	fclose(fin);
}