python + 递归
def find_path(maze,current,path,all_path):
temp = path.copy()
temp.append(current)
if current[0] == len(maze)-1 and current[1] == len(maze[0])-1:
if len(all_path) == 0:
all_path.append(len(temp))
all_path.append(temp)
else:
if len(temp) < all_path[0]:
all_path[0] = len(temp)
all_path[1] = temp
else:
if current[0]-1 >= 0:
if maze[current[0]-1][current[1]] == 0:
next_ = (current[0]-1,current[1])
if next_ not in temp:
find_path(maze,next_,temp,all_path)
if current[0]+1 < len(maze):
if maze[current[0]+1][current[1]] == 0:
next_ = (current[0]+1,current[1])
if next_ not in temp:
find_path(maze,next_,temp,all_path)
if current[1]-1 >= 0:
if maze[current[0]][current[1]-1] == 0:
next_ = (current[0],current[1]-1)
if next_ not in temp:
find_path(maze,next_,temp,all_path)
if current[1]+1 < len(maze[0]):
if maze[current[0]][current[1]+1] == 0:
next_ = (current[0],current[1]+1)
if next_ not in temp:
find_path(maze,next_,temp,all_path)
while True:
try:
n,m = map(int, input().split())
maze = []
for i in range(n):
maze.append(list(map(int, input().split())))
current = (0,0)
path,all_path = [],[]
find_path(maze,current,path,all_path)
for j in all_path[1]:
print ('(%d,%d)' % (j[0], j[1]))
except:
break


京公网安备 11010502036488号