如何使用 C# 打印给定矩阵中的岛数?

线性扫描二维网格图,如果一个节点包含'1',那么它是触发深度优先搜索的根节点。在 DFS 期间,每个访问过的节点都应设置为“0”以标记为访问过的节点。计算触发 DFS 的根节点的数量,这个数字就是岛的数量,因为从某个根开始的每个 DFS 标识一个岛。

示例

using System;

namespace ConsoleApplication{

   public class Matrix{

      public int PrintNumberOfIslands(char[,] grid){

         bool[,] visited = new bool[grid.GetLength(0), grid.GetLength(1)];

         int res = 0;

         for (int i = 0; i < grid.GetLength(0); i++){

            for (int j = 0; j < grid.GetLength(1); j++){

               if (grid[i, j] == '1' && !visited[i, j]){

                  DFS(grid, visited, i, j);

                  res++;

               }

            }

         }

         return res;

      }

      public void DFS(char[,] grid, bool[,] visited, int i, int j){

         if (i < 0 || i >= grid.GetLength(0)) return;

         if (j < 0 || j >= grid.GetLength(1)) return;

         if (grid[i, j] != '1' || visited[i, j]) return;

         visited[i, j] = true;

         DFS(grid, visited, i + 1, j);

         DFS(grid, visited, i - 1, j);

         DFS(grid, visited, i, j + 1);

         DFS(grid, visited, i, j - 1);

      }

   }

   class Program{

      static void Main(string[] args){

         Matrix m = new Matrix();

         char[,] mm = { { '1', '1', '1', '1', '0' }, { '1', '1', '0', '1', '0' }, { '1', '1', '0', '0', '0' }, { '0', '0', '0', '0', '1' } };

         Console.WriteLine(m.PrintNumberOfIslands(mm));

      }

   }

}

输出结果
2

以上是 如何使用 C# 打印给定矩阵中的岛数? 的全部内容, 来源链接: utcz.com/z/327468.html

回到顶部