Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <list>
- #include <queue>
- using namespace std;
- void escriure(list<int>& c) {
- list<int>::const_iterator it;
- it = c.begin();
- while (it != c.end()) {
- cout << *it << " ";
- ++it;
- }
- cout << endl;
- }
- void dijkstra(vector<vector<pair<int,int> > > &g, int u,int v){
- int n = g.size();
- vector<bool> vist(n,false);
- vector<int> d(n,1e9);
- //cami = vector<int> (n);
- list<int> cami;
- d[u]=0;
- priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > CP;
- CP.push(make_pair(0,u));
- while (not CP.empty()) {
- pair<int,int> q = CP.top(); CP.pop();
- if (q.second == v) { escriure(cami); return; }
- if (not vist[q.second]) {
- vist[q.second] = true;
- for (int i = 0; i < g[q.second].size(); ++i) {
- int x = g[q.second][i].second;
- int pes = g[q.second][i].first;
- if (not vist[x]) {
- if (d[x] > q.first+pes) {
- d[x] = q.first+pes;
- cami.push_back(q.second);
- CP.push(make_pair(d[x],x));
- }
- }
- }
- }
- }
- cout << "no path from " << u << " to "<< v << endl;
- }
- int main() {
- int n;
- while (cin >> n) {
- vector<vector<pair<int,int> > > g(n);
- int m;
- cin >> m;
- for (int i = 0; i < m; ++i) {
- int u,v,pes;
- cin >> u >> v >> pes;
- g[u].push_back(make_pair(pes, v));
- }
- int x, y;
- cin >> x >> y;
- vector<int> c;
- dijkstra(g,x,y);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement