Advertisement
FaisalAhemdBijoy

Greedy BFS AI

Feb 22nd, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.21 KB | None | 0 0
  1. graph = {"Oradea":{"Zerind":71,"Sibiu":151},
  2.          "Zerind":{"Oradea":71,"Arad":75},
  3.          "Arad":{"Zerind":75,"Timisoara":118,"Sibiu":140},
  4.          "Timisoara":{"Arad":118,"Lugoj":111},
  5.          "Lugoj":{"Timisoara":111,"Mehadia":70},
  6.          "Mehadia":{"Lugoj":70,"Dobreta":75},
  7.          "Dobreta":{"Mehadia":75,"Craiova":120},
  8.          "Craiova":{"Dobreta":120,"Rimnicu Vilcea":146,"Pitesti":138},
  9.          "Sibiu":{"Arad":140,"Oradea":151,"Rimnicu Vilcea":80,"Fagaras":99},
  10.          "Rimnicu Vilcea":{"Sibiu":80,"Craiova":146,"Pitesti":97},
  11.          "Fagaras":{"Sibiu":99,"Bucharest":211},
  12.          "Pitesti":{"Bucharest":101,"Rimnicu Vilcea":97,"Craiova":138},
  13.          "Bucharest":{"Fagaras":211,"Pitesti":101,"Giurgiu":90,"Urziceni":85},
  14.          "Giurgiu":{"Bucharest":90},
  15.          "Urziceni":{"Bucharest":85,"Hirsova":98,"Vaslui":142},
  16.          "Hirsova":{"Urziceni":98,"Eforie":86},"Eforie":{"Hirsova":86},
  17.          "Vaslui":{"Urziceni":142,"Iasi":92},"Iasi":{"Vaslui":92,"Neamt":87},
  18.          "Neamt":{"Iasi":87}}
  19. hsld = {'Arad': 366, 'Bucharest': 0, 'Craiova': 160, 'Dobreta': 242, 'Eforie': 161, 'Fagaras': 176, 'Giurgiu': 77, 'Hirsova': 151, 'Iasi': 226, 'Lugoj': 244, 'Mehadia': 241, 'Neamt': 234, 'Oradea': 380, 'Pitesti': 100, 'Rimnicu Vilcea': 193, 'Sibiu': 253, 'Timisoara': 329, 'Urziceni': 80, 'Vaslui': 199, 'Zerind': 374}
  20. start, goal = 'Arad', 'Bucharest'
  21.  
  22. fringe, visited, parent = [], [], {}
  23.  
  24. fringe.append(start)
  25. visited.append(start)
  26. parent[start] = None
  27.  
  28. found=False
  29. while len(fringe) > 0:
  30.     key = lambda n: hsld[n]
  31.     u = min(fringe, key = lambda n: hsld[n])
  32.     print(u)
  33.     del fringe[fringe.index(u)]
  34.     adjDict = graph[u]
  35.     for v in adjDict.keys():
  36.         if v not in visited:
  37.             visited.append(v)
  38.             parent[v] = u
  39.             if v == goal:
  40.                 found = True
  41.                 break
  42.             fringe.append(v)
  43.     if found:
  44.         break
  45.    
  46. dist, curr, path = 0, goal, []
  47. path.append(curr)
  48. while parent[curr] != None:
  49.     path.append(parent[curr])
  50.     dist = dist + graph[curr][parent[curr]]
  51.     curr = parent[curr]
  52.    
  53. path.reverse()
  54. print("Path: ", end=" ")
  55. for x in path:
  56.     print(x, end=" ")
  57. print("\nDistance: ", dist)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement