Cod sursa(job #671751)

Utilizator NitaMihaitavoidcube NitaMihaita Data 31 ianuarie 2012 20:49:38
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#include<iostream>
using namespace std;
typedef struct nod{int vec,l;nod *urm;}NOD;
NOD *p;
typedef struct {NOD *prim;}EXPERIMENT;
EXPERIMENT v[50001];
int marc[50001],d[50001];

int main ()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int i,n,j,l,min,poz,marcate=0,m;
f>>n>>m;
m=n+1;
while(f>>i>>j>>l)
	{
	p=new NOD;
	p->vec=j;
	p->l=l;
	p->urm=v[i].prim;
	v[i].prim=p;
	d[--m]=999999;
	}
for(;m>=1;m--)
	if(!d[m])d[m]=999999;
for(p=v[1].prim;p;p=p->urm)
	d[p->vec]=p->l;
d[1]=0;
marc[1]=1;marcate++;
while(marcate!=n-1)
{
	min=999999;poz=0;
	for(i=2;i<=n;i++)
		if(marc[i]==0 and d[i]<min){min=d[i];poz=i;}
	marc[poz]=1;
	marcate++;
	for(p=v[poz].prim;p;p=p->urm)
		if(d[p->vec]>p->l+d[poz])
			d[p->vec]=p->l+d[poz];
		
	
}
for(i=2;i<=n;i++)
	if(d[i]==999999)g<<"0 ";
	else g<<d[i]<<" ";
g<<"\n";
f.close();
g.close();
return 0;
}