洪水填充,用于计算封闭房间的数量及其大小-Python
我知道可以使用整体填充来计算矩阵中有多少个封闭房间(或以其他方式表示2D空间),但是如何计算每个封闭房间的大小? 以下是我正在使用的代码:洪水填充,用于计算封闭房间的数量及其大小-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:
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