首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tilemap数组:查找唯一的连续元素

Tilemap数组:查找唯一的连续元素
EN

Stack Overflow用户
提问于 2021-05-22 05:42:51
回答 1查看 263关注 0票数 0

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

代码语言:javascript
复制
[
  ["B", "B", "B"],
  ["B", "E", "B"], 
  ["E", "E", "E"], 
  ["E", "E", "B"], 
  ["B", "E", "B"]
]

代码语言:javascript
复制
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

我想知道现场有多少栋建筑物。我找不到如何实现精确的逻辑。

EN

回答 1

Stack Overflow用户

发布于 2021-05-22 07:30:22

不是很漂亮,但很管用:https://trinket.io/python3/c26252b88a

代码语言:javascript
复制
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())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67646478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档