Cod sursa(job #2433050)

Utilizator lucian2015blaugranadevil lucian2015 Data 25 iunie 2019 18:43:08
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <functional>
#include <bits/stdc++.h>
#define nmax 50005
#define inf 0x3f3f3f3f

using namespace std;


ifstream f("dijkstra.in");
ofstream g("dijkstra.out");


class graf{
private:
	vector<pair<int,int>> edges[nmax];
    int nodes;
public:
	graf(int n){
		nodes=n;
	}
	void addedge(int x,int y, int cost){
		edges[x].push_back({y,cost});
		edges[y].push_back({x,cost});
	}
	void dijkstra(int source){
		priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int> >> hashmap;
		vector<int> dist(nodes+1,inf);
		int nod, v, w, i;
		dist[source]=0;
		vector<pair<int,int>>::iterator it;
		hashmap.push({0,source});
			while(!hashmap.empty()){
				  nod=hashmap.top().second;
				  hashmap.pop();
				  for(it=edges[nod].begin();it!=edges[nod].end();it++){
				  	 v=it->first;
				  	 w=it->second;
				  	 if(dist[v] > dist[nod]+w){
				  	 	dist[v]=dist[nod]+w;
				  	 	hashmap.push({dist[v],v});
				  	 }
				  }
			}
		for(i=2;i<=nodes;i++)
			if(dist[i]==inf)
			g<<0<<" ";
		else
			g<<dist[i]<<" ";
	}

};
int main(){
	int x, y, cost, n, m, i;
	f>>n>>m;
	graf graph(n);
	for(i=1;i<=m;i++){
		f>>x>>y>>cost;
		graph.addedge(x,y,cost);
	}
  graph.dijkstra(1);
  return 0;
}