我发现了一个python示例问题,听起来像是“查找网格中连接颜色的最大数量”。换句话说,我必须找到最常见的颜色并将其连接在一起。在我的示例中,它是 0 ,重复了4次。我做了一个看起来像这样的网格。每个颜色都是一个数字。
arr = [[0,0,0,1],
[1,0,2,1],
[0,2,1,0]]
我不知道下一步该怎么做。我认为我必须开始遍历数组for i in arr:
,但是接下来我要做什么?
答案 0 :(得分:2)
您可以使用floodfill algorithm进行此操作。这是一个蛮力解决方案,并且肯定有改进的可能性。查看以下代码中的注释:
#do the floodfill and count number of fills
def floodfill_count(a, i, x, y, tot=0):
if a[x][y] == i:
a[x][y] = -1
tot += 1
#recursively invoke flood fill on all surrounding cells:
if x > 0:
tot = floodfill_count(a, i, x-1, y, tot)
if x < len(a) - 1:
tot = floodfill_count(a, i, x+1, y, tot)
if y > 0:
tot = floodfill_count(a, i, x, y-1, tot)
if y < len(a[x]) - 1:
tot = floodfill_count(a, i, x, y+1, tot)
return tot
def max_color(arr):
maxes = {}
for x in range(len(arr)):
for y in range(len(arr[x])):
#color we are looking for
query_num = arr[x][y]
#has not been filled yet
if query_num != -1:
if query_num in maxes:
maxes[query_num] = max(maxes[query_num], floodfill_count(arr, query_num, x, y))
else:
maxes[query_num] = floodfill_count(arr, query_num, x, y)
#return key associated to max value
return max(maxes, key=maxes.get)
arr = [[3,3,3,1],
[1,0,2,1],
[0,2,1,0]]
max_color = max_color(arr)
print ("max color: " + str(max_color))
这可以通过计算尚未填充的每种颜色的填充数,然后保存给定颜色的最大值来进行。在存储所有颜色值的最大值方面,该代码有些过高,但是这种方式可扩展为所需的应用程序(第二大颜色等)。我认为您可以简化以存储最大颜色和最大值(如果需要)。