Cod sursa(job #508877)

Utilizator GeorgeGradinariuGradinariu George GeorgeGradinariu Data 9 decembrie 2010 20:34:38
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
using namespace std;
int a[50][50],n,viz[50],cost[50],m;

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

void dijkstra()
{
	int dmin=3200,min,i,ok=0,nc=1;
	for(i=1;i<=n;i++)
		cost[i]=3200;
	
	cost[nc]=0;
	viz[nc]=1;

	while(ok==0)
	{dmin=3200;
	for(i=2;i<=n;i++)
	{
		if(a[nc][i]!=0&&viz[i]==0)
		{
		if(a[nc][i]<dmin)
			{min=i;
		dmin=a[nc][i];
			}
		if((a[nc][i]+cost[nc])<cost[i])
			cost[i]=a[nc][i]+cost[nc];
		}
	}
	viz[nc]=1;
	nc=min;
	ok=1;
	for(i=1;i<=n;i++)
		if(viz[i]==0)
			ok=0;
	}

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