Cod sursa(job #705036)

Utilizator Anonymous1010Chilivercu Cristian Anonymous1010 Data 2 martie 2012 23:31:57
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
#include<vector>

using namespace std;

int n,m,i,j,d[200002],x,y,z,c[200002],ok[200002],nr,pos;
vector <int>cost[200002],a[200002];

void dijkstra();

int main()
{
	
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	
	scanf("%d %d",&n,&m);
	
	for(;m;m--)
	{
		scanf("%d %d %d",&x,&y,&z);
		a[x].push_back(y);
		cost[x].push_back(z);
	}
	
	dijkstra();
	
	for(i=2;i<=n;i++)
		printf("%d ",d[i]);
	
	return 0;	
}

void dijkstra()
{
	int min;
	min=2000000000;
	for(i=2;i<=n;i++)
		d[i]=min;
	d[1]=0;
	for(i=1;i<=n;i++)
	{
		min=2000000000;
		for(j=1;j<=n;j++)
			if(!ok[j]&&d[j]<min)
			{
				min=d[j];
				pos=j;
			}
			
		ok[pos]=1;
		
		nr=a[pos].size();

		for(j=0;j<nr;j++)
			if(d[pos]+cost[pos][j]<d[a[pos][j]])
				d[a[pos][j]]=d[pos]+cost[pos][j];
				
	}
}