Cod sursa(job #1052758)

Utilizator span7aRazvan span7a Data 11 decembrie 2013 19:32:31
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#define M 2000000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int c[500001],urm[500001],L[50001],vecin[500001],cost[50001],n,viz[50001],t[50001],valmin,k;

void ad(int x,int y,int costi)
{
	vecin[k]=y;
	c[k]=costi;
	urm[k]=L[x];
	L[x]=k;
}
int main()
{   int m,i,l,j,x,y,z,p;
    f>>n>>m;
    
    for(i=1;i<=m;i++)
        {f>>x>>y>>z;
		k++;ad(x,y,z);//k++;ad(y,x,z);            
        }
        viz[1]=1;
	for(i=1;i<=n;i++)
		cost[i]=M;
	for(p=L[1];p;p=urm[p])
	{	cost[vecin[p]]=c[p];
		t[vecin[p]]=1;
	}
    k=0;
    for(l=1;l<=n-1;l++)
    {
        valmin=M;
        for(j=1;j<=n;j++)
            if(cost[j]<valmin&&!viz[j]){valmin=cost[j];k=j;}
        viz[k]=1;
			
       for(p=L[k];p;p=urm[p])
            if(!viz[vecin[p]])
            {
                if(cost[vecin[p]]>cost[k]+c[p])
                {
                    cost[vecin[p]]=cost[k]+c[p];t[i]=k;
                }
            }
    }
    for(i=2;i<=n;i++)
      {
			  if(cost[i]==M)
				  g<<0<<" ";
			  else
				  g<<cost[i]<<" ";
		}
    return 0;

}