Cod sursa(job #280874)

Utilizator cristianalex81Cristian Alexandru cristianalex81 Data 13 martie 2009 17:06:02
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#define dim 7
#define inf 9999

int n,m,a[dim][dim];
int viz[dim],cost[dim],par[dim];
void next();

//--------------
void tip()
{
freopen("dijkstra.out","w",stdout);
for (int i=2;i<=n;i++)
printf("%d ",cost[i]);
}
//--------------
void cit()
{
int x,y,val;
freopen("dijkstra.in","r",stdin);
scanf("%d %d",&n,&m);
for (int i=0;i<m;i++)
{
	scanf("%d %d %d",&x,&y,&val);
	a[x][y]=val;
	a[y][x]=val;
}
}
//-------------
void djk(int nod)
{
viz[nod]=1;
for (int i=1;i<=n;i++)
{
	if ((cost[i]>cost[nod]+a[nod][i])&&(a[nod][i]!=0)&&(viz[i]==0))
	{
		cost[i]=cost[nod]+a[nod][i];
		par[i]=nod;
	}
}
next();
}
//-------------
void next()
{
int urm,dmin=inf;
for (int i=1;i<=n;i++)
{
	if ((viz[i]==0)&&(dmin>cost[i]))
	{
	    urm=i;
	    dmin=cost[i];
	}
}
if (dmin!=inf)
djk(urm);
}
//-------------
void ini(int start)
{
for (int i=1;i<=n;i++)
{
	if (a[start][i]!=0)
	{
		cost[i]=a[start][i];
		par[i]=start;
	}
	else
		cost[i]=inf;
}
viz[start]=1;
cost[start]=0;
par[start]=0;
next();
}
//-------------
int main()
{
cit();
ini(1);
tip();
return 0;
}