Advertisement
AlfonsoPEREZ

Breadth First Search ANIMATION

Apr 27th, 2020
565
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.43 KB | None | 0 0
  1. import turtle, time, sys
  2. from collections import deque
  3.  
  4.  
  5. wn = turtle.Screen()
  6. wn.bgcolor("powderblue")    
  7. wn.title("BFS")            
  8. wn.setup(1300,700)
  9. wn.tracer(0)
  10.  
  11. pen=turtle.Turtle()
  12. pen.hideturtle()
  13. pen.up()
  14. pen.color("white")
  15. pen.goto(0, -250)
  16. pen.write("Breadth First Search",False,"center",font=("Arial Narrow",20,"bold"))
  17.  
  18.  
  19. class Maze(turtle.Turtle):                
  20.     def __init__(self):
  21.         turtle.Turtle.__init__(self)
  22.         self.shape("square")            
  23.         self.color("white")            
  24.         self.penup()                  
  25.         self.speed(0)
  26.  
  27. class Bfs(turtle.Turtle):
  28.     def __init__(self):
  29.         turtle.Turtle.__init__(self)
  30.         self.shape("square")
  31.         self.color("green")
  32.         self.penup()
  33.         self.speed(0)
  34.  
  35. class End(turtle.Turtle):
  36.     def __init__(self):
  37.         turtle.Turtle.__init__(self)
  38.         self.shape("square")
  39.         self.color("blue")
  40.         self.penup()
  41.         self.speed(0)
  42.         self.goto(1000, 1000) #HIDES IT FOR THE TIME BEING
  43.  
  44. class Start(turtle.Turtle):
  45.     def __init__(self):
  46.         turtle.Turtle.__init__(self)
  47.         self.shape("square")
  48.         self.color("red")
  49.         self.penup()
  50.         self.speed(0)
  51.  
  52. class Backtrack(turtle.Turtle):
  53.     def __init__(self):
  54.         turtle.Turtle.__init__(self)
  55.         self.shape("square")
  56.         self.color("yellow")
  57.         self.penup()
  58.         self.speed(0)
  59.         self.goto(1000, 1000) #HIDES IT FOR THE TIME BEING
  60.  
  61.  
  62. def setup(grid):
  63.     global start_x, start_y, end_x, end_y
  64.     for y in range(len(grid)):                        
  65.         for x in range(len(grid[y])):                
  66.             character = grid[y][x]                  
  67.             screen_x = -588 + (x * 24)
  68.             screen_y = 288 - (y * 24)          
  69.  
  70.             if character == "+":                  
  71.                 maze.goto(screen_x, screen_y)    
  72.                 maze.stamp()                        
  73.                 walls.append((screen_x, screen_y))  
  74.  
  75.             if character == " " or character == "o":
  76.                 path.append((screen_x, screen_y))    
  77.  
  78.             if character == "o":
  79.                 green.color("green")
  80.                 green.goto(screen_x, screen_y)      
  81.                 end_x, end_y = screen_x,screen_y  
  82.                 green.stamp()
  83.                 green.color("blue")
  84.  
  85.             if character == "c":
  86.                 start_x, start_y = screen_x, screen_y  
  87.                 red.goto(screen_x, screen_y)
  88.  
  89. def search(x,y):
  90.     frontier.append((x, y))
  91.     solution[x,y] = x,y
  92.  
  93.     while len(frontier) > 0:          
  94.         time.sleep(0)
  95.         x, y = frontier.popleft()    
  96.  
  97.         if(x - 24, y) in path and (x - 24, y) not in visited:
  98.             cell = (x - 24, y)
  99.             solution[cell] = x, y
  100.             frontier.append(cell)  
  101.             visited.add((x-24, y))
  102.  
  103.         if (x, y - 24) in path and (x, y - 24) not in visited:
  104.             cell = (x, y - 24)
  105.             solution[cell] = x, y
  106.             frontier.append(cell)
  107.             visited.add((x, y - 24))
  108.  
  109.         if(x + 24, y) in path and (x + 24, y) not in visited:
  110.             cell = (x + 24, y)
  111.             solution[cell] = x, y
  112.             frontier.append(cell)
  113.             visited.add((x +24, y))
  114.  
  115.         if(x, y + 24) in path and (x, y + 24) not in visited:
  116.             cell = (x, y + 24)
  117.             solution[cell] = x, y
  118.             frontier.append(cell)
  119.             visited.add((x, y + 24))
  120.         green.goto(x,y)
  121.         green.stamp()
  122.  
  123.  
  124. def fastest_path(x, y):
  125.     try:
  126.         yellow.goto(x, y)
  127.         yellow.stamp()
  128.         while (x, y) != (start_x, start_y):  
  129.             yellow.goto(solution[x, y])    
  130.             yellow.stamp()
  131.             x, y = solution[x, y]
  132.            
  133.         pen.clear()
  134.         pen.write("SOLUTION FOUND",False,"center",font=("Arial Narrow",20,"bold"))
  135.        
  136.     except:
  137.         pen.clear()
  138.         pen.write("NO SOLUTION FOUND",False,"center",font=("Arial Narrow",20,"bold"))
  139.  
  140. maze = Maze()              
  141. red = Start()
  142. blue = End()
  143. green = Bfs()
  144. yellow = Backtrack()              
  145.  
  146. walls = []
  147. path = []
  148. visited = set()
  149. frontier = deque()
  150. solution = {}            
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168. #MAIN PROGRAM
  169. grid = [
  170. "++++++++++++++++++++++++++++++++++++++++++++++",
  171. "+                      c                     +",
  172. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  173. "+                                            +",
  174. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  175. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  176. "+                                            +",
  177. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  178. "+                                            +",
  179. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  180. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  181. "+                                            +",
  182. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  183. "+                                            +",
  184. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  185. "+                                            +",
  186. "+ ++++++++++++++++++++++++++++++++++++++++++ +",
  187. "+                                            +",
  188. "+                      o                     +",
  189. "++++++++++++++++++++++++++++++++++++++++++++++",
  190. ]
  191.  
  192. setup(grid)
  193. wn.tracer(1)
  194. time.sleep(2)
  195. search(start_x,start_y)
  196. wn.tracer(0)
  197. fastest_path(end_x, end_y)
  198. wn.tracer(1)
  199. wn.exitonclick()
  200. #MADE BY AVMP
  201. #https://youtu.be/bUy1O2aZM-E
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement