Pagini recente » Cod sursa (job #2293586) | Cod sursa (job #1580317) | Cod sursa (job #812594) | Cod sursa (job #1280121) | Cod sursa (job #1895498)
#include<bits/stdc++.h>
using namespace std;
# define INF 0x3f3f3f3f
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
typedef pair<int, int> iPair;
class Graph
{
int V;
list< pair<int, int> > *adj;
public:
Graph(int V);
void addEdge(int u, int v, int w);
void shortestPath(int s);
};
Graph::Graph(int V)
{
this->V = V;
adj = new list<iPair> [V];
}
void Graph::addEdge(int u, int v, int w)
{
adj[u].push_back(make_pair(v, w));
}
void Graph::shortestPath(int src)
{
priority_queue< iPair, vector <iPair> , greater<iPair> > pq;
vector<int> dist(V, INF);
pq.push(make_pair(0, src));
dist[src] = 0;
while (!pq.empty())
{
int u = pq.top().second;
pq.pop();
list< pair<int, int> >::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
{
int v = (*i).first;
int weight = (*i).second;
if (dist[v] > dist[u] + weight)
{
dist[v] = dist[u] + weight;
pq.push(make_pair(dist[v], v));
}
}
}
for(int i=1;i<V;i++)
dist[i]!=INF? g<<dist[i]<<" " : g<<0<<" ";
g<<'\n';
}
int main()
{
int n,m,i,x,y,z;
f >> n >> m;
Graph g(n);
for(i=0;i<m;i++){
f>>x>>y>>z;
g.addEdge(x-1,y-1,z);
}
g.shortestPath(0);
return 0;
}