Cod sursa(job #411632)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 5 martie 2010 00:43:51
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
//Bellman Ford cu coada!
#include<fstream>
#include<vector>
#include<algorithm>
#include<queue>
#define INF 0x3f3f3f3f
#define SIZE 50005
#define mp make_pair
#define pb push_back
using namespace std;

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

int N, M, dmin[SIZE];
vector< pair<int, int> > graf[SIZE];
int main()
{
	int i, x, y, c;
	
	in >> N >> M;
	for(i = 0; i < M; in >> x >> y >> c, graf[x].pb(mp(y, c)), i++);
	
	bool viz[SIZE];
	queue<int> Q;

	memset(dmin, INF, sizeof(dmin));
	memset(viz, false, sizeof(viz));
	
	dmin[1] = 0;
	Q.push(1);
	viz[1] = true;
	while(!Q.empty())
	{
	int nod = Q.front();
	Q.pop();
	viz[nod] = false;
	for(vector< pair<int, int> >::iterator it = graf[nod].begin(); it != graf[nod].end(); ++it)
	{
		if(dmin[nod] + it->second < dmin[it->first])
			{
				dmin[it->first] = dmin[nod] + it->second;
				if(!viz[it->first])
				{
					Q.push(it->first);
					viz[it->first] = true;
				}
			}
	}
	}
	
	for(i = 2; i <= N; i++)
		out << (dmin[i] < INF ? dmin[i] : 0) << " ";
}