class Solution {\npublic:\n int numIslands(vector<vector>& grid) {\n int nr = grid.size();\n if (!nr) return 0;\n int nc = grid[0].size();\n int num_islands = 0;\n for (int r = 0; r < nr; r++) {\n for (int c = 0; c < nc; c++) {\n if (grid[r][c] == '1') {\n num_islands++;\n grid[r][c] = '0';\n queue<pair<int, int>> neighbours;\n neighbours.emplace(r, c);\n while (!neighbours.empty()) {\n auto rc = neighbours.front();\n neighbours.pop();\n int row = rc.first, col = rc.second;\n if (row - 1 >= 0 && grid[row-1][col] == '1') {\n neighbours.emplace(row-1, col);\n grid[row-1][col] = '0';\n }\n if (row + 1 < nr && grid[row+1][col] == '1') {\n neighbours.emplace(row+1, col);\n grid[row+1][col] = '0';\n }\n if (col - 1 >= 0 && grid[row][col-1] == '1') {\n neighbours.emplace(row, col-1);\n grid[row][col-1] = '0';\n }\n if (col + 1 < nc && grid[row][col+1] == '1') {\n neighbours.emplace(row, col+1);\n grid[row][col+1] = '0';\n }\n }\n }\n }\n }\n return num_islands;\n }\n};//转换为Swift内容:class Solution {\n func numIslands(_ grid: [[Character]]) -> Int {\n var grid = grid\n let nr = grid.count\n if nr == 0 {\n return 0\n }\n let nc = grid[0].count\n var numIslands = 0\n \n for r in 0..<nr {\n for c in 0..<nc {\n if grid[r][c] == "1" {\n numIslands += 1\n grid[r][c] = "0"\n var queue = [(r, c)]\n \n while !queue.isEmpty {\n let (row, col) = queue.removeFirst()\n \n if row - 1 >= 0 && grid[row-1][col] == "1" {\n queue.append((row-1, col))\n grid[row-1][col] = "0"\n }\n \n if row + 1 < nr && grid[row+1][col] == "1" {\n queue.append((row+1, col))\n grid[row+1][col] = "0"\n }\n \n if col - 1 >= 0 && grid[row][col-1] == "1" {\n queue.append((row, col-1))\n grid[row][col-1] = "0"\n }\n \n if col + 1 < nc && grid[row][col+1] == "1" {\n queue.append((row, col+1))\n grid[row][col+1] = "0"\n }\n }\n }\n }\n }\n \n return numIslands\n }\n}

C++ and Swift Solution for Counting Islands in a 2D Grid

原文地址: https://www.cveoy.top/t/topic/qbuS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录