Cod sursa(job #1870968)

Utilizator igroitaGroita Igor igroita Data 7 februarie 2017 00:11:55
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
using namespace std;

ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
struct graf{
	int nod, cost;
	graf *next;
};
const int inf = 1 << 30;
int n, m, d[50005], q[50005];
graf *a[50005];

void add(int x, int y, int z){
	graf *q = new graf;
	q->nod = y; q->cost = z;
	q->next=a[x]; a[x]=q; 
}

void dijkstra(){
	for(int i=2; i<=n; ++i) d[i]=inf;
	
	int min, pmin=0;
	for(int i=1;  i<=n; ++i){
		min = inf;
		for(int j=1; j<=n; ++j){
			if(d[j]<min && !q[j]){
				min= d[j]; pmin=j;
			}
		}
		q[pmin]=1;
		graf *t = a[pmin];
		while(t){
			if(d[t->nod] > d[pmin] + t->cost ){
				d[t->nod] = d[pmin] + t->cost;
			}
			t = t->next;
		}
	}
}

int main(){
	cin>>n>>m;
	while(m--){
		int x, y, z;
		cin>>x>>y>>z;
		add(x,y,z);
	}
	dijkstra();
	for(int i=2; i<=n; ++i){
	if(d[i]==inf) cout<<0<<" ";		
	else cout<<d[i]<<"  ";
}
	return 0;
}