一、题目
二、解题思路
首先是对自己的一个思路描述,首先只是想判断四周是否为存在0,然后不断顺着0的位置一路走下去,当出现四周没有1时,在从原本的位置倒退一格,但是发现这样的结果会忽略很多条路径,因此最终看来很多的相关的题目,总结出了自己的方法
正确解法:
归结到底这还是一个深度算法的题,我们要模拟出每一条路径,从四个方向不断尝试向前前进,如果能走我们就将该位置存储最终路径,不能走我们不断回退,同时删除存入的路径。最终代码如下
代码
data = []
path_sum = [] # 所有的路径
len_path = [] # 路径的长度统计
# 输入
n, m = input().split()
n, m = int(n), int(m)
for i in range(n):
data.append(input(f'请输入第{i + 1}行的数据:').split())
def outOfRange(i, j, path_one):
"""
判断是否超出范围或者撞墙
:return:
"""
if i == n or i == -1 or j == m or j == -1: # 判断是否超出围墙
pass
else:
# 前路可走,并且不走回头路
if data[i][j] == '0' and path_one.count([i, j]) == 0:
walk(i, j, path_one)
def judgment_executable(i, j, path_one):
"""
进行发散
:return:
"""
path_one.append([i, j])
if i == n - 1 and j == m - 1: # 到达终点
data[n - 1][m - 1] = '0' # 终点重新设为可走
# 变为元组存入总数据
path_sum.append(tuple(path_one))
# 删除最后一个,进行发散
path_one.pop()
else:
outOfRange(i + 1, j, path_one) # 下
outOfRange(i, j - 1, path_one) # 左
outOfRange(i - 1, j, path_one) # 上
outOfRange(i, j + 1, path_one) # 右
path_one.pop() # 删除无路可走的位置
# 不停前进
def walk(i, j, path_one):
judgment_executable(i, j, path_one)
walk(0, 0, []) # 开始行走
# 输出
for i in path_sum:
for j in i:
print(f'{tuple(j)}->' if j != [n - 1, m - 1] else tuple(j), end='')
print(f'\tStep={len(i) - 1}')
len_path.append(len(i) - 1) # 存入所有路径的所有大小
print(max(len_path) - min(len_path))
```。