簡體   English   中英

僅包含 0 和 1 的二維矩陣 - python

[英]2D matrix containing only 0s and 1s - python

給定的二維矩陣只包含 0 和 1。 每個 0 代表土地,每個 1 代表河流的一部分。 一條河流由任意數量的 1 組成,這些 1 水平或垂直相鄰(但不是對角相鄰)。 形成一條河流的相鄰 1 的數量決定了它的大小。 編寫一個 function,它返回一個數組,該數組包含輸入矩陣中表示的所有河流的大小。

   Input:
array =[
        [0, 0, 1, 0, 1, 0],
        [1, 0, 0, 1, 1, 0],
        [1, 0, 0, 0, 0, 1],
        [1, 0, 0, 1, 1, 1],
    ]
output:
There are 4 rivers in the given matrix, and their sizes are: [1, 3, 3, 4]

但實際上我希望擁有: [1, 2, 2, 2, 3, 3]

因為我只尋找水平或垂直相鄰的河流,而不是兩者兼而有之的河流。 (正如我的算法 output 帶來的)。

我的算法使用 DFS:

def riverSizes(matrix):
    sizes = []  # # It would contain all of our river sizes
    visited = [[False for value in row] for row in matrix]
    for i in range(len(matrix)):
        for j in range(len(matrix[i])):
            if visited[i][j]:
                continue
            traverseNode(i, j, matrix, visited, sizes)
    return sizes


def traverseNode(i, j, matrix, visited, sizes):
    currentRiverSize = 0
    nodesToExplore = [[i, j]]
    while len(nodesToExplore):
        currentNode = nodesToExplore.pop()
        i = currentNode[0]
        j = currentNode[1]
        if visited[i][j]:
            continue
        visited[i][j] = True
        if matrix[i][j] == 0:
            continue
        currentRiverSize += 1
        unvisitedNeighbors = getUnvisitedNeighbors(i, j, matrix, visited)
        for neighbor in unvisitedNeighbors:
            nodesToExplore.append(neighbor)
    if currentRiverSize > 0:
        sizes.append(currentRiverSize)


def getUnvisitedNeighbors(i, j, matrix, visited):
    unvisitedNeighbors = []
    if i > 0 and not visited[i - 1][j]:
        unvisitedNeighbors.append([i - 1, j])
    if i < len(matrix) - 1 and not visited[i + 1][j]:
        unvisitedNeighbors.append([i + 1, j])
    if j > 0 and not visited[i][j - 1]:
        unvisitedNeighbors.append([i, j - 1])
    if j < len(matrix[0]) - 1 and not visited[i][j + 1]:
        unvisitedNeighbors.append([i, j + 1])
    return unvisitedNeighbors

我該如何解決?

該算法為您提供了問題 [1, 3, 3, 4] 的正確結果。 一條河流由水平或垂直相鄰的 1 組成(一個 1 不能同時與另一個 1 水平和垂直相鄰,在這種情況下混淆是問題陳述的 'either' 'or' ))。 這就是為什么 getUnvisitedNeighbors 從包含 1 的字段中查看所有垂直和水平方向的原因。換句話說,河流可能有一個 L 形狀的結果矩陣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM