如何使用 C# 列印給定矩陣中的島嶼數量?


線性掃描二維網格地圖,如果一個節點包含 '1',則該節點是一個根節點,會觸發深度優先搜尋。深度優先搜尋期間,每個訪問過的節點都應設定為 '0' 以標記為已訪問節點。統計觸發深度優先搜尋的根節點數,該數字即是島嶼數,因為每個從某個根節點開始的深度優先搜尋都會識別一個島嶼。

示例

 即時演示

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

更新時間:2021 年 8 月 27 日

550 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.