Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // O (V^2 + E)
- const int INF = 1000000000;
- vector<vector<pair<int, int>>> adj;
- void dijkstra(int s, vector<int> & d, vector<int> & p) {
- int n = adj.size();
- d.assign(n, INF);
- p.assign(n, -1);
- vector<bool> vis(n, false); // visited array
- d[s] = 0;
- for (int i = 0; i < n; i++) {
- int v = -1;
- for (int j = 0; j < n; j++) {
- if (vis[j] == false && (v == -1 || d[j] < d[v]))
- v = j;
- }
- if (d[v] == INF)
- break;
- vis[v] = true;
- for (auto edge : adj[v]) {
- int to = edge.first;
- int len = edge.second;
- if (d[v] + len < d[to]) {
- d[to] = d[v] + len;
- p[to] = v;
- }
- }
- }
- }
- // printing the path from source s (given) to vertex t
- vector<int> restore_path(int s, int t, vector<int> const& p) {
- vector<int> path;
- for (int v = t; v != s; v = p[v])
- path.push_back(v);
- path.push_back(s);
- reverse(path.begin(), path.end());
- return path;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement