Cod sursa(job #1462713)

Utilizator TeodorescuStefanEduardTeodorescu Stefan Eduard TeodorescuStefanEduard Data 18 iulie 2015 18:49:47
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

fstream in("dijkstra.in", ios::in);
fstream out("dijkstra.out", ios::out);

#define nmax 50005
#define inf 999999

struct nod
{
	int info,cost;
	nod *next;
} *lista[nmax], *p, *q;

int n,m,s[nmax],d[nmax];

int main()
{
	
	int i,j,c,mini,minp;

	in>>n>>m;

	while(in>>i>>j>>c)
	{
		p= new nod;
		p->info= j;
		p->cost= c;
		if(c == 0)
			p->cost= inf;
		if(i == 1)
			d[j]= p->cost;
		if(d[i] == 0)
			d[i] = inf;
		if(d[j] == 0)
			d[j] = inf;
		p->next= lista[i];
		lista[i]= p;
	}

	s[1]= 1;

	for(int k=1;k<n;k++)
	{
		mini= inf;
		for(i=2;i<=n;i++)
			if((d[i] < mini) && (s[i] == 0))
			{
				mini= d[i];
				minp= i;
			}

		s[minp]= 1;

		p= lista[minp];

		while(p)
		{
			if(s[p->info] == 0)
				if( d[p->info] > (d[minp]+ p->cost))
					d[p->info]= d[minp]+ p->cost;
			p= p->next;
		}
	}

	for(i=2;i<=n;i++)
		out<< d[i]<< " ";
	



        
    in.close();
    out.close();

	return 0;
}