LeetCode 200. 岛屿的个数 (C#实现)——深度优先搜索

问题:https://leetcode-cn.com/problems/number-of-islands/

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:

输入:
11110
11010
11000
00000

输出: 1

示例 2:

输入:
11000
11000
00100
00011

输出: 3

GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/NumIslandsClass.cs

Blog:https://www.cnblogs.com/zxxxx/

思路:使用深度搜索(DFS)遍历图,已经遍历的元素递归更改值,防止重复搜索

        public int NumIslands(char[,] grid)
        {
            if (grid.Length == 0) return 0;
            var result = 0;
            for (int i = 0; i < grid.GetLength(0); i++)
            {
                for (int j = 0; j < grid.GetLength(1); j++)
                {
                    if (grid[i, j] == '1')
                    {
                        result++;
                        ToTwo(grid, i, j);
                    }
                }
            }
            return result;
        }

        private void ToTwo(char[,] grid, int i, int j)
        {
            if (i < 0 || j < 0 || i >= grid.GetLength(0) || j >= grid.GetLength(1) || grid[i, j] != '1')
            {
                return;
            }
            grid[i, j] = '2';
            ToTwo(grid, i, j + 1);
            ToTwo(grid, i, j - 1);
            ToTwo(grid, i - 1, j);
            ToTwo(grid, i + 1, j);
        }

 

posted @ 2019-03-18 16:48  落花流水Zxxxx  阅读(527)  评论(0编辑  收藏  举报