程序将Python中所有单元格所需的操作数计数为相同颜色

假设我们有一个二维矩阵M。现在每个像元中都包含一个代表其颜色的值,并且具有相同颜色的相邻像元(上,下,左,右)将被分组在一起。现在,考虑将一组中的所有单元格设置为某种颜色的操作。然后,最终找到所需的最少操作数,以使每个单元格具有相同的颜色。并且当颜色转换时,无法再次设置。

所以,如果输入像

2
2
2
2
1
1
1
1
2
3
2
1

然后输出将为2,因为我们可以将2作为颜色填充到组1中,然后用1填充3。

为了解决这个问题,我们将按照以下步骤操作:

  • 如果矩阵为空,则

    • 返回0

  • 定义一个功能dfs()。这将需要i,j,矩阵,val

  • n:=矩阵的行数,m:=矩阵的行数

  • 如果i <0或i> n-1或j <0或j> m-1

    • 返回

  • 如果matrix [i,j]与-1相同,则

    • 返回

  • 如果matrix [i,j]与val相同,则

    • 矩阵[i,j]:= -1

    • dfs(i,j + 1,矩阵,val)

    • dfs(i + 1,j,矩阵,val)

    • dfs(i,j-1,矩阵,val)

    • dfs(i-1,j,矩阵,val)

  • 除此以外,

    • 返回

  • 从主要方法,请执行以下操作-

  • n:=矩阵的行数,m:=矩阵的行数

  • d:=空映射

  • 对于范围在0到n-1之间的i

    • 对于0到m-1范围内的j,执行

    • val:= matrix [i,j]

    • 如果val不等于-1,则

    • d [val]:= d [val] + 1

    • dfs(i,j,矩阵,val)

  • 根据f的字典元素值对其排序

  • 安全:= l的最后一个元素

  • res:= 0

  • 对于d的每个键值对k和v,执行

    • 如果k与安全性不同,则

    • res:= res + v

  • 返回资源

让我们看下面的实现以更好地理解-

示例

from collections import defaultdict
class Solution:
   def solve(self, matrix):
      if not matrix:
         return 0
      def dfs(i, j, matrix, val):
         n, m = len(matrix), len(matrix[0])
      if i < 0 or i > n - 1 or j < 0 or j > m - 1:
         return
      if matrix[i][j] == -1:
         return
      if matrix[i][j] == val:
         matrix[i][j] = -1
      dfs(i, j + 1, matrix, val)
      dfs(i + 1, j, matrix, val)
      dfs(i, j - 1, matrix, val)
      dfs(i - 1, j, matrix, val)
      else:
         return
      n, m = len(matrix), len(matrix[0])
      d = defaultdict(int)
   for i in range(n):
      for j in range(m):
         val = matrix[i][j]
   if val != -1:
      d[val] += 1
      dfs(i, j, matrix, val)
      l = sorted(d,key=lambda x: d[x])
      safe = l[-1]
      res = 0
   for k, v in d.items():
      if k != safe:
         res += v
   return res
ob = Solution()matrix = [
   [2, 2, 2, 2],
   [1, 1, 1, 1],
   [2, 3, 2, 1]
]
print(ob.solve(matrix))

输入值

matrix = [[2, 2, 2, 2],[1, 1, 1, 1],[2, 3, 2, 1]]

输出结果

2
猜你喜欢