Cod sursa(job #702652)

Utilizator define_AriMiculas Armand Ariel define_Ari Data 2 martie 2012 02:11:08
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<iostream>
#include<fstream>
using namespace std;
const int inf=2000;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
long n,m,a[5000][5000],t[50000],dmin[50001];
void citire()
{
	f>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i!=j)
				a[i][j]=inf;
	long x,y,c;
	while(f>>x>>y>>c)
		a[x][y]=c;
}
void dijkstra(int r)
{
	int t[100]={0},cmin,ok=0,pos;
	t[r]=1;
	for(int i=1;i<=n;i++)
		dmin[i]=a[r][i];
	while(!ok)
	{
		cmin=inf;
		for(int i=1;i<=n;i++)
			if(dmin[i]<cmin&&!t[i])
				{
					cmin=dmin[i];
					pos=i;
				}
			t[pos]=1;
			if(cmin!=inf)
				for(int i=1;i<=n;i++)
					if(!t[i]&&dmin[i]>dmin[pos]+a[pos][i])
						dmin[i]=dmin[pos]+a[pos][i];
					else ;
			else
				ok=1;
	}
}
int main()
{
	citire();
	dijkstra(1);
	for(int i=2;i<=n;i++)
		if(a[1][i]==inf)
			cout<<"0 ";
		else
			g<<dmin[i]<<" ";
}