def main(args): # Read the board from standard in board = sys.stdin.read().splitlines() for i in range(len(board)): board[i] = list(board[i]) # Define the heuristics def manhatten_heuristic(state, goal_state): dr = abs(state[0] - goal_state[0]) dc = abs(state[1] - goal_state[1]) return dr + dc def no_heuristic(state, goal_state): return 0 # A* astar_problem = GridProblem(board, manhatten_heuristic) astar_result = uniform_cost.search(astar_problem) make_graphics('astar_', args.image_destination, args.postfix, board, astar_result) # Dijsktra dijkstra_problem = GridProblem(board, no_heuristic) dijkstra_result = uniform_cost.search(dijkstra_problem) make_graphics('dijkstra_', args.image_destination, args.postfix, board, dijkstra_result) # BFS bfs_problem = GridProblem(board, no_heuristic) bfs_result = breadth_first.search(bfs_problem) make_graphics('bfs_', args.image_destination, args.postfix, board, bfs_result)
def main(args): # Reading input rows, cols = [int(x) for x in sys.stdin.readline().split(' ')] cars = [] for line in sys.stdin: line = line.strip('()\n') parts = line.split(',') parts = [int(part) for part in parts] cars.append(tuple(parts)) # Making a 2D-representation board = [[-1 for c in range(cols)] for r in range(rows)] for ci in range(len(cars)): (ori, c, r, size) = cars[ci] dr = [0, 1][ori] dc = [1, 0][ori] for i in range(size): board[r + (dr * i)][c + (dc * i)] = ci # Solving heuristic = str_to_heuristic(args.heuristic, cars, board) problem = RushHourProblem(cars, board, heuristic) (end_state, parent, explored, _) = uniform_cost.search(problem) # Results print('Explored states:'.rjust(17), len(explored)) move = 0 while end_state in parent: if args.image_destination: make_graphics(end_state, args.image_destination, move) move += 1 end_state = parent[end_state] if args.image_destination: make_graphics(end_state, args.image_destination, move) print('Moves:'.rjust(17), move) print('Branching factor:', '{:1.3f}'.format( exp(log(len(explored)) / move)))