递归+最短路径 | HJ43 迷宫问题
import copy
def func(migong, i, j, path):
if (i, j) == (n-1, m-1):
res.append(copy.deepcopy(path))
return
if j+1 < m and migong[i][j+1] != '1' and (i,j+1)not in path:
path.append((i, j+1))
func(migong, i, j+1, path)
path.pop()
if i+1 < n and migong[i+1][j] != '1' and (i+1,j)not in path:
path.append((i+1, j))
func(migong, i+1, j, path)
path.pop()
if j-1 >= 0 and migong[i][j-1] != '1' and (i,j-1)not in path:
path.append((i, j-1))
func(migong, i, j-1, path)
path.pop()
if i-1 >= 0 and migong[i-1][j] != '1' and (i-1,j)not in path:
path.append((i-1, j))
func(migong, i-1, j, path)
path.pop()
while True:
try:
n, m = list(map(int, input().split(' ')))
migong = []
res = []
for _ in range(n):
migong.append(input().split(' '))
func(migong, 0, 0, [(0,0)])
min_length, min_path = n*m, None
for path in res:
if len(path) < min_length:
min_length = len(path)
min_path = path
for node in min_path:
print(f'({node[0]},{node[1]})')
except:
break
用时:40min
华为笔试刷题 文章被收录于专栏
高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107
