Added all the codes.
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# Assignment-A2 (A* Algorithm)
|
||||
|
||||
"""
|
||||
THIS CODE HAS BEEN TESTED AND IS FULLY OPERATIONAL.
|
||||
|
||||
Problem Statement: Implement A star Algorithm for any game search problem.
|
||||
|
||||
Code from ArtificialIntelligence (SPPU - Third Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-te-comp-content/ArtificialIntelligence
|
||||
"""
|
||||
|
||||
# This code directly implements A* algorithm for finding the optimal
|
||||
# solution. It is NOT implemented for any game search problem.
|
||||
|
||||
# A* implementation for 8 puzzle problem can be found in the "Codes" folder
|
||||
# and maze problem solving can be found in the "Alternatives" folder.
|
||||
|
||||
# BEGINNING OF CODE
|
||||
import heapq
|
||||
|
||||
def a_star(graph, start, goal, heuristic):
|
||||
g = {v: float('inf') for v in graph}
|
||||
f = {v: float('inf') for v in graph}
|
||||
parent = {v: None for v in graph}
|
||||
|
||||
g[start] = 0
|
||||
f[start] = heuristic[start]
|
||||
|
||||
open_list = [(f[start], start)]
|
||||
|
||||
while open_list:
|
||||
_, current = heapq.heappop(open_list)
|
||||
|
||||
if current == goal:
|
||||
return reconstruct_path(parent, goal, g[goal])
|
||||
|
||||
for neighbor, weight in graph[current]:
|
||||
tentative_g = g[current] + weight
|
||||
if tentative_g < g[neighbor]:
|
||||
parent[neighbor] = current
|
||||
g[neighbor] = tentative_g
|
||||
f[neighbor] = tentative_g + heuristic[neighbor]
|
||||
heapq.heappush(open_list, (f[neighbor], neighbor))
|
||||
|
||||
return []
|
||||
|
||||
def reconstruct_path(parent, goal, cost):
|
||||
path = []
|
||||
while goal:
|
||||
path.append(goal)
|
||||
goal = parent[goal]
|
||||
path.reverse()
|
||||
print("Path cost:", cost)
|
||||
return path
|
||||
|
||||
def main():
|
||||
n = int(input("Enter number of vertices: "))
|
||||
print("Enter vertex names (e.g., A B C ...):")
|
||||
vertices = input().split()
|
||||
|
||||
graph = {v: [] for v in vertices}
|
||||
|
||||
m = int(input("Enter number of edges: "))
|
||||
print("Enter edges (format: source destination weight):")
|
||||
for _ in range(m):
|
||||
u, v, w = input().split()
|
||||
w = int(w)
|
||||
graph[u].append((v, w))
|
||||
# graph[v].append((u, w)) # Uncomment for undirected graph
|
||||
|
||||
heuristic = {}
|
||||
print("Enter heuristic values (e.g., A 4 B 2 ...):")
|
||||
for _ in range(n):
|
||||
name, h = input().split()
|
||||
heuristic[name] = int(h)
|
||||
|
||||
start = input("Enter start vertex: ")
|
||||
goal = input("Enter goal vertex: ")
|
||||
|
||||
path = a_star(graph, start, goal, heuristic)
|
||||
if path:
|
||||
print("Optimal path:", ' -> '.join(path))
|
||||
else:
|
||||
print("No path found.")
|
||||
|
||||
main()
|
||||
# END OF CODE
|
||||
Reference in New Issue
Block a user