洪水填充,用于计算封闭房间的数量及其大小-Python

洪水填充,用于计算封闭房间的数量及其大小-Python,python,matrix,2d,flood-fill,Python,Matrix,2d,Flood Fill,我知道可以使用整体填充来计算矩阵中有多少个封闭房间(或以其他方式表示2D空间),但是如何计算每个封闭房间的大小? 以下是我正在使用的代码: def floodFill(world, x, y, oldChar, newChar, area_size): # The recursive algorithm. Starting at x and y worldWidth = len(world) worldHeight = len(world[0]) if oldChar == None:

我知道可以使用整体填充来计算矩阵中有多少个封闭房间(或以其他方式表示2D空间),但是如何计算每个封闭房间的大小?

以下是我正在使用的代码:

def floodFill(world, x, y, oldChar, newChar, area_size):
# The recursive algorithm. Starting at x and y
worldWidth = len(world)
worldHeight = len(world[0])

if oldChar == None:
    oldChar = world[x][y]

if world[x][y] != oldChar:
    # Base case. If the current x, y character is not the oldChar,
    # then do nothing.
    return

# Change the character at world[x][y] to newChar
world[x][y] = newChar
# Add one to the area_size
area_size += 1

# Recursive calls. (with boundaries) 
if x > 0:  # left
    floodFill(world, x-1, y, oldChar, newChar, area_size)
if y > 0:  # down
    floodFill(world, x, y-1, oldChar, newChar, area_size)
if x < worldWidth-1:  # right
    floodFill(world, x+1, y, oldChar, newChar, area_size)
if y < worldHeight-1:  # up
    floodFill(world, x, y+1, oldChar, newChar, area_size)
(请注意,我尝试让flood fill函数返回area_size值,但结果表明,在递归函数中,上面堆栈返回的值不会影响下面堆栈的值。)

我想获得以下信息:房间的数量和每个房间的大小是多少?您认为我应该创建一个存储信息的字典列表,并使用函数为房间计数中的范围添加一个房间吗?之后,可能会为列表中每个字典中的键分配一个值看起来是这样的:

房间信息=[]#在添加房间之前

房间信息=[{“面积大小”:无},{“面积大小”:无},{“面积大小”:无}]#如果有3个房间

房间信息=[{“面积大小”:3},{“面积大小”:15},{“面积大小”:8}]#如果房间大小为3,15,8

def getNumOfRooms(world):
worldWidth = len(world)
worldHeight = len(world[0])

roomCount = 0

for x in range(worldWidth):
    for y in range(worldHeight):
        # on each possible x, y empty space in the map, call floodfill.
        if world[x][y] == '.':
            floodFill(world, x, y, '.', 'x', 0)

            printWorld(world)
            print()

            roomCount += 1
return roomCount