Cod sursa(job #1124927)

Utilizator PlatenitesVoicu Cristian Platenites Data 26 februarie 2014 14:29:23
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
#define inf 999999999;

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int m[101][101],n,M,s,a,b,d,veniri[101],cost[101],viz[101],p,u,c[101],i;
int main ()
{
	f>>n>>M;
	s=1;
	for(i=1;i<=M;i++)
	{
	    f>>a>>b>>d;
		m[a][b]=d;
		veniri[b]=1;
	}
	for(i=1;i<=n;i++)
		if(veniri[i]==0&&i!=s)
		{
			viz[i]=1;
			cost[i]=-1;
		}
	p=u=1;
	c[u]=s;
	viz[s]=1;
	while(p<=u)
	{
		for(i=1;i<=n;i++)
		{
			if(viz[i]==0&&m[c[p]][i]>0)
			{
				c[++u]=i;
				viz[i]=1;
				cost[i]=cost[c[p]]+m[c[p]][i];
			}
			if(cost[i]>cost[c[p]]+m[c[p]][i]&&m[c[p]][i]!=0)
				cost[i]=cost[c[p]]+m[c[p]][i];
		}
		p++;
	}
	for(i=1;i<=n;i++)
        if(i!=s&&cost[i]!=-1&&cost[i]==0)
            cost[i]=-1;
	for(i=1;i<=n;i++)
		g<<cost[i]<<" ";
	return 0;
}