Cod sursa(job #1041118)

Utilizator miha88Popescu Mihaela miha88 Data 25 noiembrie 2013 15:38:10
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct nod{
	int vf,l;};
vector <nod> v[50003];
int d[50003],n,m;
void citire()
{
	f>>n>>m;
	for(int i=1;i<=m;i++)
		{
			int a,b,c;
			f>>a>>b>>c;
			nod y;
			y.vf=b;
			y.l=c;
			v[a].push_back(y);
		}
	d[1]=0;
	for(int i=2;i<=n;i++)
		d[i]=2000000000;
}
void bfs (int x)
{
int eq[50003];  nod y;
queue<int>q;
q.push(x);
eq[x]=1;
while(!q.empty() )
{
	x=q.front();
	q.pop();
	eq[x]=0;
	for(int i=0;i<v[x].size();i++)
		{
			y=v[x][i];
			if(d[y.vf]>d[x]+y.l){
				d[y.vf]=d[x]+y.l;
				if(eq[y.vf]==0)
					{q.push(y.vf); 
					eq[y.vf]=1; }
			}
		}
}
}
int main()
{
	citire();
	bfs(1);
	for(int i=2;i<=n;i++)
		if(d[i]!=2000000000)
		g<<d[i]<<' ';
		else
		g<<0<<' ';
	return 0;
}