Skip to content

Commit dfa0bb4

Browse files
committed
A* Search Algorithm
1 parent 1b6ddcc commit dfa0bb4

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

10.Graphs/AStarSearchAlgorithm.cpp

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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

Comments
 (0)