想象一下,你是作为土地测量师为地方政府工作的。这是你的工作,以了解有多少空间,有多大的空间,在城市现有的工业用地,新建的建筑物。为了达到这个目的,你需要测量现在有多少座建筑物。工业站点由一个2D数组表示,其中"B“表示(建筑物的一部分),"E”表示一个空空间。如果B是水平或垂直连接到其他B的,那么这些B是一个建筑物的一部分。如果两个B只是对角线连接,就把它们看作是单独的建筑物。编写一个函数: find_building( input_map ),它返回工业站点上的建筑物数量。如果数组中的任何元素不是"B“或"E",则函数应该返回-1。注意:编辑器中的初始代码使用制表符进行缩进。别把它和空间混在一起。示例:以下示例中有三栋建筑物:
[
["B", "B", "B"],
["B", "E", "B"],
["E", "E", "E"],
["E", "E", "B"],
["B", "E", "B"]
]def func(test):
print(test)
count = 1
for i in range(len(test)):
for j, data in enumerate(test[i]):
if data == "B" or data == "N":
if data == "B":
arr[i][j] = count;
count = count + 1
if (j + 1) < len(arr[i]):
if arr[i][j+1] == "B" :
arr[i][j+1] = "N"
if (i+1) < len(test):
if arr[i+1][j] == "B":
arr[i+1][j] = "N"
return test我想知道现场有多少栋建筑物。我找不到如何实现精确的逻辑。

发布于 2021-05-22 07:30:22
不是很漂亮,但很管用:https://trinket.io/python3/c26252b88a
arr = [
["B", "B", "B"],
["B", "E", "B"],
["E", "E", "E"],
["E", "E", "B"],
["B", "E", "B"]
]
def check_contiguous( idxRow, idxCol):
arr[idxRow][idxCol] = 'X'
# bottom left cell
if idxRow == len(arr)-1 and idxCol == len(arr[0])-1:
return 0
# bottom row
elif idxRow == len(arr)-1:
if arr[idxRow][idxCol+1] != 'B':
return 0
else:
if arr[idxRow][idxCol+1] == 'B':
check_contiguous(idxRow, idxCol+1)
# right column
if idxCol == len(arr[0])-1:
if arr[idxRow+1][idxCol] != 'B':
return 0
else:
if arr[idxRow+1][idxCol] == 'B':
check_contiguous(idxRow+1, idxCol)
else:
if arr[idxRow+1][idxCol+1] != 'B' and \
arr[idxRow][idxCol+1] != 'B':
return 0
else:
if arr[idxRow+1][idxCol] == 'B':
check_contiguous(idxRow+1, idxCol)
if arr[idxRow][idxCol+1] == 'B':
check_contiguous(idxRow, idxCol+1)
def func():
total_nb = 0
for idx_row, row in enumerate(arr):
for idx_col, el in enumerate(row):
if el == 'B':
total_nb += 1
check_contiguous(idx_row, idx_col)
return total_nb
print(func())https://stackoverflow.com/questions/67646478
复制相似问题