|
| 1 | +/* Amit Bansal - amitbansal7 */ |
| 2 | +#include <bits/stdc++.h> |
| 3 | +using namespace std; |
| 4 | + |
| 5 | +void AStar(vector<pair<int, pair<int, int> > >adj[], int src, int dest, int heuristicDistFromSource, int v) |
| 6 | +{ |
| 7 | + priority_queue< pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq; |
| 8 | + |
| 9 | + vector<int> dist(v, INT_MAX); |
| 10 | + vector<int> parent(v, -1); |
| 11 | + |
| 12 | + parent[src] = src; |
| 13 | + dist[src] = 0; |
| 14 | + |
| 15 | + pq.push(make_pair(dist[src] + heuristicDistFromSource, src)); |
| 16 | + |
| 17 | + while (!pq.empty()) |
| 18 | + { |
| 19 | + int u = pq.top().second; |
| 20 | + pq.pop(); |
| 21 | + |
| 22 | + if (u == dest) |
| 23 | + break; |
| 24 | + |
| 25 | + vector<pair<int, pair<int, int> > >::iterator it; |
| 26 | + for (it = adj[u].begin(); it != adj[u].end(); it++) |
| 27 | + { |
| 28 | + int v = it->first; |
| 29 | + int w = it->second.first; |
| 30 | + int heuristic = it->second.second; |
| 31 | + |
| 32 | + if (dist[v] > dist[u] + w) |
| 33 | + { |
| 34 | + dist[v] = dist[u] + w; |
| 35 | + pq.push(make_pair(dist[v] + heuristic, v)); |
| 36 | + parent[v] = u; |
| 37 | + } |
| 38 | + } |
| 39 | + } |
| 40 | + |
| 41 | + cout << "Distance from " << src << " to " << dest << " is " << dist[dest] << endl; |
| 42 | + cout << "Path is " << dest; |
| 43 | + int p = dest; |
| 44 | + while (parent[p] != p) |
| 45 | + { |
| 46 | + cout << "<-" << parent[p]; |
| 47 | + p = parent[p]; |
| 48 | + } |
| 49 | + cout << endl; |
| 50 | +} |
| 51 | + |
| 52 | +int main() |
| 53 | +{ |
| 54 | + vector<pair<int, pair<int, int> > >adj[13]; |
| 55 | + |
| 56 | + //adj[src].push_back(make_pair(dest, make_pair(weight, heuristic))); |
| 57 | + adj[0].push_back(make_pair(1, make_pair(7, 9))); |
| 58 | + adj[0].push_back(make_pair(2, make_pair(2, 7))); |
| 59 | + adj[0].push_back(make_pair(3, make_pair(3, 8))); |
| 60 | + adj[1].push_back(make_pair(2, make_pair(3, 7))); |
| 61 | + adj[1].push_back(make_pair(4, make_pair(0, 10))); |
| 62 | + adj[2].push_back(make_pair(4, make_pair(4, 8))); |
| 63 | + adj[2].push_back(make_pair(8, make_pair(1, 6))); |
| 64 | + adj[3].push_back(make_pair(12, make_pair(2, 6))); |
| 65 | + adj[4].push_back(make_pair(6, make_pair(5, 6))); |
| 66 | + adj[7].push_back(make_pair(5, make_pair(2, 0))); |
| 67 | + adj[8].push_back(make_pair(7, make_pair(2, 3))); |
| 68 | + adj[8].push_back(make_pair(6, make_pair(3, 6))); |
| 69 | + adj[9].push_back(make_pair(10, make_pair(6, 4))); |
| 70 | + adj[9].push_back(make_pair(11, make_pair(4, 3))); |
| 71 | + adj[10].push_back(make_pair(11, make_pair(4, 3))); |
| 72 | + adj[11].push_back(make_pair(5, make_pair(5, 0))); |
| 73 | + adj[12].push_back(make_pair(9, make_pair(6, 4))); |
| 74 | + adj[12].push_back(make_pair(10, make_pair(4, 4))); |
| 75 | + |
| 76 | + // AStar(adj, src, dest, heuristicDistFromSource, nmberOfEdges); |
| 77 | + AStar(adj, 0, 5, 10, 13); |
| 78 | +} |
0 commit comments