Cod sursa(job #675882)

Utilizator lucian666Vasilut Lucian lucian666 Data 8 februarie 2012 13:35:25
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <iostream>
#include <vector>
#define N 50001
#define INF 0x3f3f3f
using namespace std;
ofstream fout("dijkstra.out");
int T[500001],d[50001],v[500001],n;
struct QQQ{
	int vf;
	int cost;
	QQQ(){
		vf=cost=0;
	}
	QQQ(int i, int c=0){
		vf=i;
		cost = c;
	}
	
};

vector<QQQ> G[N];

void read(){
	ifstream fin("dijkstra.in");
	int m;
	fin >>n >> m;
	for ( ; m ; --m){
		int i,j,c;
		fin >> i >> j >> c;
		G[i].push_back(QQQ(j,c));
	}
}
int dijkstra(int start)
{
	int i,j,poz,k;
	for(int i=1;i<=n;i++)
		d[i]=INF;
		for(i=0;i<G[start].size();i++)
			d[G[start][i].vf]=G[start][i].cost;
		v[start]=1;
		for(i=1;i<n;i++)
		{
			int minim=INF;
				for(int j=1;j<=n;j++)
					if(d[j]<minim&&v[j]==0)
					{
						minim=d[j];
						poz=j;
					}
					v[poz]=1;
					for(k=0;k<G[poz].size();k++)
						if(d[G[poz][k].vf]>d[poz]+G[poz][k].cost)
						d[G[poz][k].vf]=d[poz]+G[poz][k].cost;
		}
		return 1;
}
		

int main(){
	read();
	dijkstra(1);
	for(int i=2;i<=n;i++)
		if(d[i]==INF)
			fout<<0<<" ";
		else
			fout<<d[i]<<" ";
		return 0;
}