Cod sursa(job #271423)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 5 martie 2009 11:57:01
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
#define N 100
#define oo 32000

int n,m,x,y,i,j,nod_cur,viz[N],coada[N],d[N],vf,cost;
int a[N][N];

void bellman(int nod);

int main()
{
		freopen("bellman.in","r",stdin);
		freopen("bellman.out","w",stdout);

		scanf("%d%d%d",&n,&m,&vf);

		for(i = 1; i <=m; i++)
			{
			scanf("%d %d %d",&x,&y,&cost);
			a[x][y] = cost;
			}

		bellman(vf);

		for(i=2; i<= n; i++)
			printf("%d ",d[i]);

		return 0;
}

void bellman(int nod)
{
	int prim, ultim;

	viz[nod] = 1;
	prim = ultim = 1;
	coada[prim] = nod;

	for(i = 1; i <= n; i++)
		d[i] = oo;

	d[nod] = 0;
	while(prim <= ultim)
	{
		nod_cur = coada[prim];
		for(i = 1; i <= n; i++)
			if(a[nod_cur][i] !=0)
			 if(d[nod_cur] + a[nod_cur][i] < d[i])
			 {
				d[i] = d[nod_cur] + a[nod_cur][i];
				if(viz[i] == 0)
				{
					coada[++ultim] = i;
					viz[i] = 1;
				}
			}
		prim++;
	}
}