我有一个编码挑战问题,我有点被困住了。问题案文如下:
访问虚拟庄园的
游客对您虚拟花园的美丽和辉煌感到惊讶,但正在寻找最佳游览地点的指导,以查看其富丽堂皇。
作为管理员,您的下一个任务是生成一个新的花园构图的文本布局,用星号(*)标注访问花园的最佳位置。
最好的位置是“空白地带”,游客可以看到每个主要方向(北、南、东、西)最多的花。当然,游客不能透过墙壁观看。如果有多个位置可以看到相同数量的花,您的文本布局应该标记所有这些位置。如果花园里没有花,所有的空地都应该标出是理想的。例如,考虑到花园的组成
这个问题涉及在二维数组中设置一个花和墙的花园,并提供一种修改矩阵的方法,以插入一个星号作为与大多数花相交的标志。
B-空白F-花W-墙
输入:
B B B B B
B B F B B
B B B B B
B B F B B
B B F B B
预期产出:
B B * B B
B B F B B - Flower 1
B B * B B
B B F B B - Flower 2
B B F B B - Flower 3
Where the two asterisks represent the only positions in the garden where a visitor
can see 3 flowers by looking north, south, east and west
我最初的想法是遍历2D数组中的每个项目,并对空白("B")的每个序列执行DFS,以获得当前空白位置的基数(即北、南、东和西)所看到的花数。在python注意到我的最大递归深度被超过了,并且还没有能够在分配星号方面取得进展时,我陷入了困境。有什么想法吗?
garden = [['B', 'B', 'B', 'B', 'B'], ['B', 'B', 'F', 'B', 'B'], ['B', 'B', 'B', 'B', 'B'], ['B', 'B', 'F', 'B', 'B'], ['F', 'B', 'F', 'B', 'B']]
class Solution:
def count(self, garden):
maxSeenFlowers = 0
for row in range(len(garden)):
for col in range(len(garden[0])):
if garden[row][col] == "B":
self.dfs(garden, maxSeenFlowers, row, col)
garden[row][col] = self.maxSeenFlowers
print(garden)
def dfs(self,garden,maxSeenFlowers, row, col):
self.maxSeenFlowers = 0
if row < 0 or col < 0 or row == len(garden) or col == len(garden[0]) or garden[row][col] == "W":
return
if garden[row][col] == "F":
self.maxSeenFlowers += 1
self.dfs(garden,maxSeenFlowers, row+1, col) # look to the east
self.dfs(garden,maxSeenFlowers, row-1, col) # look to the west
self.dfs(garden,maxSeenFlowers, row, col+1) # look to the north
self.dfs(garden,maxSeenFlowers, row, col-1) # look to the south
plot1 = Solution()
plot1.count(garden)
编辑:这是代码的摘录,我用它来和每个基数方向的所有值。谢谢@brokenbenchmark:
def bestSeen(self):
gardenScore = [[0 for i in range(len(self.garden[0]))] for j in range(len(self.garden))]
# print(gardenScore)
maxSeen = 0
# from left to right.
for i in range(len(self.garden)):
row_hits = 0
for j in range(len(self.garden[0])):
if self.garden[i][j] == 'F':
row_hits += 1
elif self.garden[i][j] == 'W':
row_hits = 0
else:
gardenScore[i][j] = row_hits
# print(gardenScore)
# from right to left
for i in range(len(self.garden)):
row_hits = 0
for j in range(len(self.garden[0])-1, -1, -1):
if self.garden[i][j] == 'F':
row_hits += 1
elif self.garden[i][j] == 'W':
row_hits = 0
else:
gardenScore[i][j] += row_hits
# print(gardenScore)
# from bottom to top
for i in range(len(self.garden[0])):
col_hits = 0
for j in range(len(self.garden)):
if self.garden[j][i] == 'F':
col_hits += 1
elif self.garden[j][i] == 'W':
col_hits = 0
else:
gardenScore[j][i] += col_hits
# print(gardenScore)
# from top to bottom
for i in range(len(self.garden[0])):
col_hits = 0
for j in range(len(self.garden)-1, -1, -1):
if self.garden[j][i] == 'F':
col_hits += 1
elif self.garden[j][i] == 'W':
col_hits = 0
else:
gardenScore[j][i] += col_hits
maxSeen = max(maxSeen, gardenScore[j][i])
# print(gardenScore)
for i in range(len(self.garden)):
for j in range(len(self.garden[0])):
if gardenScore[i][j] == maxSeen:
self.garden[i][j] = "*"
print(self.garden)
发布于 2022-04-09 05:15:35
增加最大递归深度(警告!)
我陷入了困境,因为python注意到,我的最大递归深度已经超过了,并且无法在分配星号方面取得进展。有什么想法吗?
实际上,有一种方法可以增加python中的递归限制。
默认情况下,Python中的最大递归限制为1000。
在解释如何提高递归限制之前
有几件事你应该知道!
没有递归限制的
。
我不建议增加递归。
而是尝试迭代实现您的算法,以避免深入的递归。
增加最大递归深度限制的代码
import sys
#See current recursion limit by calling sys.getrecursionlimit()
print(sys.getrecursionlimit()) #(default = 1000)
print(sys.setrecursionlimit(2000)) # Sets the limit to 2000
https://stackoverflow.com/questions/71804841
复制相似问题