如何解决Python3 多次使用相同的输入运行相同的函数,但每次都会产生不同的输出
我目前正在尝试用 python 解决一个简单版本的跳棋。具体来说,我正在尝试解决 USACO 2008 年 12 月铜牌比赛中的“跳棋”问题。 (Problem Link)
我的想法是在每个国王的位置上运行一个递归的dfs函数。但是,我的 dfs 函数遇到了一些问题。当我多次运行 dfs 函数时,即使参数相同,该函数也会产生不同的输出。具体来说,它只在第一时间产生正确的输出。我不知道发生了什么,任何帮助将不胜感激,谢谢! (我使用的是 Python 3.7)
这是我的 dfs 函数:
def dfs(x,y,n,graph,path,count,visited):
if str([x+1,y+1]) not in visited:
visited.add(str([x+1,y+1]))
if count == 0:
path += [[x+1,y+1]]
return path
if x < 0 or y < 0 or x > n or y > n:
return path
path += [[x+1,y+1]]
try:
if graph[x+1][y+1] == "o":
graph[x+1][y+1] = "+"
return dfs(x+2,y+2,count-1,visited)
except IndexError as e: pass
try:
if graph[x+1][y-1] == "o":
graph[x+1][y-1] = "+"
return dfs(x+2,y-2,visited)
except IndexError as e: pass
try:
if graph[x-1][y+1] == "o":
graph[x-1][y+1] = "+"
return dfs(x-2,visited)
except IndexError as e: pass
try:
if graph[x-1][y-1] == "o":
graph[x-1][y-1] = "+"
return dfs(x-2,visited)
except IndexError as e: pass
return path
print(dfs(7,2,grid.copy(),[],set()))
print(dfs(7,set()))
这是我得到的输出:
这是我的完整代码:
n = int(input())
grid = []
for i in range(n):
grid.append(list(input().rstrip()))
def dfs(x,visited)
except IndexError as e: pass
return path
count = 0
Ks = []
for x in range(n):
for y in range(n):
if grid[x][y] == "K":
Ks.append([x,y])
if grid[x][y] == "o":
count += 1
print(dfs(7,set()))
解决方法
.copy()
列表方法仅适用于列表的一个“层”。由于 grid
是一个列表列表,如果您更改副本,原始内容仍将更改。
例如,在 Python 控制台中尝试
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a.copy()
>>> b
[[1,9]]
>>> b[0][0] = 5
>>> a
[[5,9]]
您看到 a
已更改,尽管 b
已设置为 a.copy()
。您需要制作某种形式的“双重”副本。
或者,使用 deepcopy
模块中的 copy
函数:
>>> from copy import deepcopy
>>> a = [[1,9]]
>>> b = deepcopy(a)
>>> b[0][0] = 5
>>> a
[[1,9]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。