Cod sursa(job #681227)

Utilizator bogdan353Costea Bogdan bogdan353 Data 16 februarie 2012 19:41:11
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

#define nmax 50002
#define pb push_back
#define mp make_pair
#define inf 0x3f3f3f3f


int n,m,cost[nmax],v[nmax],sir[nmax];
vector <pair <int , int> > lista[nmax];
ofstream g("dijkstra.out");

void dijkstra()
{
	cost[1]=0;
	for(int i=2;i<=n;i++)
		cost[i]=inf;
	int nod_minim=1;
	int cont=0;
	while(cont!=n)
	{
	int minim_partial=inf;
	int nod_partial;
		for(unsigned int i=0;i<lista[nod_minim].size();i++)
			{
		
				int nod=lista[nod_minim][i].first;
				//g<<nod<<" ";
				if(v[nod]==1) continue;
				int cost1=lista[nod_minim][i].second;
				int cost_tot=cost1+cost[nod_minim];
				if(cost_tot<cost[nod]) cost[nod]=cost_tot;
			}
		
		//g<<"\n";
			v[nod_minim]=1;
			for(int i=1;i<=n;i++)
			{
				if(v[i]==1) continue;
				if(cost[i]<minim_partial)
				{
					minim_partial=cost[i];
					nod_partial=i;
				}
			}
				
			cont++;
			nod_minim=nod_partial;
	}
}
	
	
		
		
		
	



int main()
{
	ifstream f("dijkstra.in");
	
	
	f>>n>>m;
	
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		f>>a>>b>>c;
		lista[a].pb(mp(b,c));
	}
	
	dijkstra();
	
	for(int i=2;i<=n;i++)
	{
		if(cost[i]==inf)
		{
			g<<"0 ";
			continue;
		}
		g<<cost[i]<<" ";
	}
	
}