Cod sursa(job #1605880)

Utilizator raulion3331Raul Berari raulion3331 Data 19 februarie 2016 16:02:59
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;

#define MAXN 50005
#define MINIM 100000000

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int graf[MAXN][MAXN], n, dist[MAXN], m;
bool marcat[MAXN];

void citire()
{
	fin >> n >> m;
	for (int count = 1; count <= m; count++)
	{
		int i, j, c;
		fin >> i >> j >> c;
		graf[i][j] = graf[j][i] = c;
	}
}

int distantaMinima()
{
	int min = MINIM, minIndex;

	for (int i = 1; i <= n; i++)
		if (!marcat[i] && dist[i] <= min)
			min = dist[i], minIndex = i;

	return minIndex;
}

void dijkstra()
{
	for (int i = 1; i <= n; i++)
		dist[i] = MINIM, marcat[i] = false;

	dist[1] = 0;

	for (int count = 1; count < n; count++)
	{
		int i = distantaMinima();
		marcat[i] = true;

		for (int j = 1; j <= n; j++)
			if (!marcat[j] && graf[i][j] && dist[i] != MINIM 
				&& dist[i] + graf[i][j] < dist[j])
				dist[j] = dist[i] + graf[i][j];
	}
}

void afisare()
{
	for (int i = 2; i <= n; i++)
	{
		if (dist[i] == MINIM)
			fout << "0 ";
		else
			fout << dist[i] << " ";
	}
}

int main()
{
	citire();
	dijkstra();
	afisare();
	return 0;
}