Cod sursa(job #1323489)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 21 ianuarie 2015 09:11:21
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <vector>
std::vector<int> *arr,*cost;
int sol[50001];
bool fol[50001];
int n,m;
int minim(int a,int b)
{
	if(a>b) return b;
	return a;
}
int main()
{
	freopen ("dijkstra.in","r",stdin);
	freopen ("dijkstra.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=2;i<=n;i++) sol[i]=1000000000;
	arr=new std::vector<int> [n+1];
	cost=new std::vector<int> [n+1];
	int p1,p2,c;
	for(int i=0;i<m;i++)
	{
		scanf("%d%d%d",&p1,&p2,&c);
		arr[p1].push_back(p2);
		cost[p1].push_back(c);
	}
	fol[1]=1;
	int minpos=1,min;
	for(int i=3;i<=n;i++)
	{
		int len=arr[minpos].size();
		for(int j=0;j<len;j++)
		{
			if(fol[arr[minpos][j]]==0) sol[arr[minpos][j]]=minim(sol[arr[minpos][j]],sol[minpos]+cost[minpos][j]);
		}
		min=100000000;
		for(int j=1;j<=n;j++)
		{
			if(fol[j]==0)
			{
				if(min>sol[j])
				{
					min=sol[j];
					minpos=j;
				}
			}
		}
		fol[minpos]=1;
	}
	for(int i=2;i<=n;i++) printf("%d ",sol[i]);
}