Cod sursa(job #473937)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 1 august 2010 19:30:37
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#include <vector>
#include <queue>

#define NMAX 50001
#define INF 0x3f3f3f3f
using namespace std;

vector<int> G[NMAX],C[NMAX];
int d[NMAX];
queue<int> Q;
int N;

void init()
{
	memset(d,INF,sizeof(d));
	d[1]=0;
	Q.push(1);
}

void citire()
{
	int M;
	ifstream fin("dijkstra.in");
	fin>>N>>M;
	int x,y,c;
	for(int i=1;i<=M;i++)
		{
			fin>>x>>y>>c;
			G[x].push_back(y);
			C[x].push_back(c);
		}
	fin.close();
}

void afisare()
{
	ofstream fout("dijkstra.out");
	for(int i=2;i<=N;i++)
		if(d[i]==INF) fout<<"0 ";
	else 
		fout<<d[i]<<" ";
	fout<<"\n";
	fout.close();
}

void bell()
{
	int x;
	unsigned int i;
	while(!Q.empty())
	{
		x=Q.front();
		Q.pop();
		for(i=0;i<G[x].size();i++)
		{
			if(d[x]+C[x][i]<d[G[x][i]])
			{
				d[G[x][i]]=d[x]+C[x][i];
				Q.push(G[x][i]);
			}
		}
	}
}

int main(int argc,char *argv[])
{
	init();
	
	citire();
	
	bell();
	
	afisare();
}