Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#을 사용하여 주어진 행렬의 섬 수를 인쇄하는 방법은 무엇입니까?

<시간/>

2d 그리드 맵을 선형 스캔합니다. 노드에 '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