程序在C ++中查找通讯塔中的最小组数?

假设我们有一个2D二进制矩阵,其中1代表一个通讯塔,0代表一个空单元。塔可以通过以下方式进行通信:1.如果塔A和塔B在同一行或同一列上,则它们可以彼此通信。2.如果塔A可以与塔B对话,而B可以与C对话,那么A可以与C对话(传递属性)。我们必须找到那里的塔组总数(这里的一组是可以互相交谈的塔的列表)。

所以,如果输入像

110
001
101

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

  • 定义一个函数dfs(),它将采用一个2D数组矩阵,即i,j,n,m,

  • 矩阵[i,j]:= 2

  • 对于初始化k:= 1,当k <n时,更新(将k增加1),执行:

    • dfs(矩阵,p,q,n,m)

    • p:=(i + k)mod n

    • q:= j

    • 如果matrix [p,q]与1相同,则:

    • 对于初始化k:= 1,当k <m时,更新(将k增加1),执行:

      • dfs(矩阵,p,q,n,m)

      • p:=我

      • q =(j + k)

      • 如果matrix [p,q]与1相同,则:

    • 从主要方法执行以下操作:

    • n:=矩阵大小

    • 回答:= 0

    • 对于初始化i:= 0,当i <n时,更新(将i增加1),请执行以下操作:

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

      • (将ans增加1)

      • dfs(矩阵,i,j,n,m)

      • 对于初始化j:= 0,当j <m时,更新(将j增加1),请执行以下操作:

      • 返回ans

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

      示例

      #include <bits/stdc++.h>
      using namespace std;
      class Solution {
         public:
         void dfs(vector<vector<int>>& matrix, int i, int j, int& n, int& m) {
            matrix[i][j] = 2;
            for (int k = 1; k < n; k++) {
               int p = (i + k) % n, q = j;
               if (matrix[p][q] == 1) dfs(matrix, p, q, n, m);
            }
            for (int k = 1; k < m; k++) {
               int p = i, q = (j + k) % m;
               if (matrix[p][q] == 1) dfs(matrix, p, q, n, m);
            }
         }
         int solve(vector<vector<int>>& matrix) {
            int n = matrix.size(), m = matrix[0].size();
            int ans = 0;
            for (int i = 0; i < n; i++) {
               for (int j = 0; j < m; j++) {
                  if (matrix[i][j] == 1) {
                     ans++;
                     dfs(matrix, i, j, n, m);
                  }
               }
            }
            return ans;
         }
      };
      
      int solve(vector<vector<int>>& matrix) {
         return (new Solution())->solve(matrix);
      }
      
      main(){
         vector<vector<int>> v = {
            {1,1,0},
            {0,0,1},
            {1,0,1}
         };
         cout << solve(v);
      }

      输入值

      {{1,1,0},
      {0,0,1},
      {1,0,1}};

      输出结果

      1