Cod sursa(job #512892)

Utilizator GeorgeGradinariuGradinariu George GeorgeGradinariu Data 14 decembrie 2010 19:39:08
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
using namespace std;
#define Inf 10000
int a[50][50],n,viz[50],cost[50],m,x0=1,pre[50];

void citire()
{
	ifstream in("dijkstra.in");
	int i,j,k;
	in>>n;
	for(i=0;i<=n;i++)
		for(j=0;j<=n;j++)
			a[i][j]=Inf;
	
	while(in>>i>>j>>k)
		a[i][j]=a[j][i]=k;
	in.close();
	
}

void dijkstra()
{
	int i,j,dmin,vfmin;
	for(i=1;i<=n;i++)
	{
		cost[i]=a[x0][i];
		pre[i]=x0;
	}
	viz[x0]=1;
	pre[x0]=0;
	
for(j=1;j<n;j++)
{
	dmin=Inf;
	for(i=1;i<=n;i++)
		if(!viz[i]&&cost[i]<dmin)
		{
			dmin=cost[i];
			vfmin=i;
		}
		
	viz[vfmin]=1;
	for(i=1;i<=n;i++)
		if(!viz[i]&&cost[i]>dmin+a[vfmin][i])
		{
			pre[i]=vfmin;
			cost[i]=dmin+a[vfmin][i];
		}
}

}
int main ()
{
	int i;
	ofstream out ("dijkstra.out");
	citire();
	dijkstra();
	for(i=2;i<=n;i++)
		out<<cost[i]<<" ";
	
	out.close();
	return 0;
}