Cod sursa(job #705009)

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

using namespace std;

int n,m,i,j,d[200002],x,y,z,c[200002],ok[200002],nr;
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);
		a[y].push_back(x);
		cost[x].push_back(z);
		cost[y].push_back(z);
	}
	
	dijkstra();
	
	for(i=2;i<=n;i++)
		printf("%d ",d[i]);
	
	return 0;	
}

void dijkstra()
{
	ok[1]=1;
	c[0]=1;
	c[1]=1;
	
	for(i=1;i<=c[0];i++)
	{
		nr=a[c[i]].size();
		
		for(j=0;j<nr;j++)
			if(!ok[a[c[i]][j]]||d[a[c[i]][j]]>d[c[i]]+cost[c[i]][j])
			{
				d[a[c[i]][j]]=d[c[i]]+cost[c[i]][j];
				if(!ok[a[c[i]][j]])
				{
					ok[a[c[i]][j]]=1;
					c[0]++;
					c[c[0]]=a[c[i]][j];
				}
			}
	}
}