using System; using System.Collections.Generic; class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */ public int solve (List<List<char>> grid) { // write code here if (grid == null || grid.Count == 0) return 0; Dictionary<string, bool> kpvs = new Dictionary<string, bool>(); for (int i = 0; i < grid.Count; i++) for (int j = 0; j < grid[i].Count; j++) kpvs.Add(i + "-" + j, false); int nDYCount = 0; for (int i = 0; i < grid.Count; i++) { for (int j = 0; j < grid[i].Count; j++) { if (kpvs[i + "-" + j] || grid[i][j] == '0') continue; nDYCount++; DG(kpvs, grid.Count - 1, grid[i].Count - 1, i, j, grid); } } return nDYCount; } public static void DG(Dictionary<string, bool> kpvs, int nX, int nY, int nI, int nJ, List<List<char>> grid) { if (nI < 0 || nI > nX || nJ < 0 || nJ > nY) return; if (grid[nI][nJ] == '0' || kpvs[nI + "-" + nJ]) return; kpvs[nI + "-" + nJ] = true; //向上 DG(kpvs, nX, nY, nI - 1, nJ, grid); //向下 DG(kpvs, nX, nY, nI + 1, nJ, grid); //向左 DG(kpvs, nX, nY, nI, nJ - 1, grid); //向右 DG(kpvs, nX, nY, nI, nJ + 1, grid); } }