Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import turtle, time, sys
- from collections import deque
- wn = turtle.Screen()
- wn.bgcolor("powderblue")
- wn.title("BFS")
- wn.setup(1300,700)
- wn.tracer(0)
- pen=turtle.Turtle()
- pen.hideturtle()
- pen.up()
- pen.color("white")
- pen.goto(0, -250)
- pen.write("Breadth First Search",False,"center",font=("Arial Narrow",20,"bold"))
- class Maze(turtle.Turtle):
- def __init__(self):
- turtle.Turtle.__init__(self)
- self.shape("square")
- self.color("white")
- self.penup()
- self.speed(0)
- class Bfs(turtle.Turtle):
- def __init__(self):
- turtle.Turtle.__init__(self)
- self.shape("square")
- self.color("green")
- self.penup()
- self.speed(0)
- class End(turtle.Turtle):
- def __init__(self):
- turtle.Turtle.__init__(self)
- self.shape("square")
- self.color("blue")
- self.penup()
- self.speed(0)
- self.goto(1000, 1000) #HIDES IT FOR THE TIME BEING
- class Start(turtle.Turtle):
- def __init__(self):
- turtle.Turtle.__init__(self)
- self.shape("square")
- self.color("red")
- self.penup()
- self.speed(0)
- class Backtrack(turtle.Turtle):
- def __init__(self):
- turtle.Turtle.__init__(self)
- self.shape("square")
- self.color("yellow")
- self.penup()
- self.speed(0)
- self.goto(1000, 1000) #HIDES IT FOR THE TIME BEING
- def setup(grid):
- global start_x, start_y, end_x, end_y
- for y in range(len(grid)):
- for x in range(len(grid[y])):
- character = grid[y][x]
- screen_x = -588 + (x * 24)
- screen_y = 288 - (y * 24)
- if character == "+":
- maze.goto(screen_x, screen_y)
- maze.stamp()
- walls.append((screen_x, screen_y))
- if character == " " or character == "o":
- path.append((screen_x, screen_y))
- if character == "o":
- green.color("green")
- green.goto(screen_x, screen_y)
- end_x, end_y = screen_x,screen_y
- green.stamp()
- green.color("blue")
- if character == "c":
- start_x, start_y = screen_x, screen_y
- red.goto(screen_x, screen_y)
- def search(x,y):
- frontier.append((x, y))
- solution[x,y] = x,y
- while len(frontier) > 0:
- time.sleep(0)
- x, y = frontier.popleft()
- if(x - 24, y) in path and (x - 24, y) not in visited:
- cell = (x - 24, y)
- solution[cell] = x, y
- frontier.append(cell)
- visited.add((x-24, y))
- if (x, y - 24) in path and (x, y - 24) not in visited:
- cell = (x, y - 24)
- solution[cell] = x, y
- frontier.append(cell)
- visited.add((x, y - 24))
- if(x + 24, y) in path and (x + 24, y) not in visited:
- cell = (x + 24, y)
- solution[cell] = x, y
- frontier.append(cell)
- visited.add((x +24, y))
- if(x, y + 24) in path and (x, y + 24) not in visited:
- cell = (x, y + 24)
- solution[cell] = x, y
- frontier.append(cell)
- visited.add((x, y + 24))
- green.goto(x,y)
- green.stamp()
- def fastest_path(x, y):
- try:
- yellow.goto(x, y)
- yellow.stamp()
- while (x, y) != (start_x, start_y):
- yellow.goto(solution[x, y])
- yellow.stamp()
- x, y = solution[x, y]
- pen.clear()
- pen.write("SOLUTION FOUND",False,"center",font=("Arial Narrow",20,"bold"))
- except:
- pen.clear()
- pen.write("NO SOLUTION FOUND",False,"center",font=("Arial Narrow",20,"bold"))
- maze = Maze()
- red = Start()
- blue = End()
- green = Bfs()
- yellow = Backtrack()
- walls = []
- path = []
- visited = set()
- frontier = deque()
- solution = {}
- #MAIN PROGRAM
- grid = [
- "++++++++++++++++++++++++++++++++++++++++++++++",
- "+ c +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ ++++++++++++++++++++++++++++++++++++++++++ +",
- "+ +",
- "+ o +",
- "++++++++++++++++++++++++++++++++++++++++++++++",
- ]
- setup(grid)
- wn.tracer(1)
- time.sleep(2)
- search(start_x,start_y)
- wn.tracer(0)
- fastest_path(end_x, end_y)
- wn.tracer(1)
- wn.exitonclick()
- #MADE BY AVMP
- #https://youtu.be/bUy1O2aZM-E
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement