Cod sursa(job #525024)

Utilizator nautilusCohal Alexandru nautilus Data 23 ianuarie 2011 22:18:59
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
#include<vector>
#include<queue>

#define dmax 50002
#define inf 9999

using namespace std;

int n,m;
int d[dmax],uz[dmax];

vector<int> a[dmax];
vector<int> cost[dmax];
queue<int> q;

void citire()
{
 int i,x,y,c;
	
 FILE *fin;
 fin=fopen("dijkstra.in","r");
 
 fscanf(fin,"%d %d",&n, &m);
 for (i=1; i<=m; i++)
	 {
	  fscanf(fin,"%d %d %d",&x, &y, &c);
	  a[x].push_back(y);
	  cost[x].push_back(c);
	 }
	
 fclose(fin);
}

void solve()
{
 int i,elem;
	
 q.push(1);
 
 for (i=2; i<=n; i++)
	 d[i]=inf;
  
 while (q.size())
	 {
	  elem=q.front();
	  
	  for (i=0; i<(int)a[elem].size(); i++)
			  if (d[a[elem][i]] > d[elem] + cost[elem][i])
				 {
				  d[a[elem][i]]= d[elem] + cost[elem][i];
				  q.push(a[elem][i]);
				 }
		
	  q.pop();
	 }
}

void afisare()
{
 int i;
	
 ofstream fout("dijkstra.out");
 
 for (i=2; i<=n; i++)
	 if (d[i]!=inf)
		 fout<<d[i]<<" "; else
		 fout<<"0 ";
	
 fout.close();
}

int main()
{
 
 citire();	
 solve();
 afisare();
 
 return 0;
}