Created
July 18, 2017 00:43
-
-
Save ab2005/68b2f9257e3898bbcedb4c83f1ed76f3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ----------- | |
| # User Instructions: | |
| # | |
| # Modify the the search function so that it returns | |
| # a shortest path as follows: | |
| # | |
| # [['>', 'v', ' ', ' ', ' ', ' '], | |
| # [' ', '>', '>', '>', '>', 'v'], | |
| # [' ', ' ', ' ', ' ', ' ', 'v'], | |
| # [' ', ' ', ' ', ' ', ' ', 'v'], | |
| # [' ', ' ', ' ', ' ', ' ', '*']] | |
| # | |
| # Where '>', '<', '^', and 'v' refer to right, left, | |
| # up, and down motions. Note that the 'v' should be | |
| # lowercase. '*' should mark the goal cell. | |
| # | |
| # You may assume that all test cases for this function | |
| # will have a path from init to goal. | |
| # ---------- | |
| grid = [[0, 0, 1, 0, 0, 0], | |
| [0, 0, 0, 0, 0, 0], | |
| [0, 0, 1, 0, 1, 0], | |
| [0, 0, 1, 0, 1, 0], | |
| [0, 0, 1, 0, 1, 0]] | |
| init = [0, 0] | |
| goal = [len(grid)-1, len(grid[0])-1] | |
| cost = 1 | |
| delta = [[-1, 0 ], # go up | |
| [ 0, -1], # go left | |
| [ 1, 0 ], # go down | |
| [ 0, 1 ]] # go right | |
| delta_name = ['^', '<', 'v', '>'] | |
| def search(grid,init,goal,cost): | |
| # ---------------------------------------- | |
| # modify code below | |
| # ---------------------------------------- | |
| closed = [[0 for row in range(len(grid[0]))] for col in range(len(grid))] | |
| closed[init[0]][init[1]] = 1 | |
| x = init[0] | |
| y = init[1] | |
| g = 0 | |
| open = [[g, x, y]] | |
| found = False # flag that is set when search is complete | |
| resign = False # flag set if we can't find expand | |
| while not found and not resign: | |
| if len(open) == 0: | |
| resign = True | |
| return 'fail' | |
| else: | |
| open.sort() | |
| open.reverse() | |
| next = open.pop() | |
| x = next[1] | |
| y = next[2] | |
| g = next[0] | |
| if x == goal[0] and y == goal[1]: | |
| found = True | |
| else: | |
| for i in range(len(delta)): | |
| x2 = x + delta[i][0] | |
| y2 = y + delta[i][1] | |
| if x2 >= 0 and x2 < len(grid) and y2 >=0 and y2 < len(grid[0]): | |
| if closed[x2][y2] == 0 and grid[x2][y2] == 0: | |
| g2 = g + cost | |
| open.append([g2, x2, y2]) | |
| closed[x2][y2] = 1 | |
| return expand # make sure you return the shortest path |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment