Computer >> Máy Tính >  >> Lập trình >> C#

Làm thế nào để in số đảo trong một ma trận nhất định bằng C #?

Quét tuyến tính bản đồ lưới 2d, nếu một nút có chứa '1', thì đó là nút gốc kích hoạt Tìm kiếm đầu tiên theo chiều sâu. Trong DFS, mọi nút đã truy cập phải được đặt là '0' để đánh dấu là nút đã truy cập. Đếm số nút gốc kích hoạt DFS, số này sẽ là số đảo vì mỗi DFS bắt đầu từ gốc nào đó xác định một đảo.

Ví dụ

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));
      }
   }
}

Đầu ra

2