Cod sursa(job #301418)

Utilizator cristiprgPrigoana Cristian cristiprg Data 8 aprilie 2009 10:49:57
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#define DIM 100
const int INF = 1<<30;

int a[DIM][DIM], n, m, d[DIM], v[DIM];

int main()
{
	FILE *f = fopen("dijkstra.in", "r");
	fscanf(f, "%d%d", &n, &m);
	int i, x, y, j;
	for (i = 1; i <= n; d[i] = INF,  i++)
		for (j = 1; j <= n; j++)
			a[i][j] = INF;

	for (i = 1; i <= m; i++)
	{
		fscanf(f, "%d%d", &x, &y);
		fscanf(f, "%d", &a[x][y]);
		a[y][x] = a[x][y];
	}

	fclose(f);
/*	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
			if (a[i][j] != INF)
				printf("%3d", a[i][j]);
			else
				printf("  X");

		printf("\n");
	}
*/

	d[1] = 0, v[1] = 0;
	for (i = 1; i <= n; i++)
	{
		for (j = i + 1; j <= n; j++)
			if (!v[i] && a[i][j] != INF)
				if (d[i] + a[i][j] < d[j])
					d[j] = d[i] + a[i][j];

		v[j] = 1;
	}

	f = fopen("dijkstra.out", "w");
	for (i = 2; i <= n; i++)
		fprintf(f, "%d ", (d[i] == INF)? 0 : d[i]);


	return 0;
}