題目: LeetCode - 200. Number of Islands

題目說明

給一個二維的陣列當作 2d 地圖,1 代表土地,0 代表海水,求出地圖中島嶼的數量。( 上下左右相鄰的 1 代表同一座島 )

解題思路

將整個地圖訪問一次,若碰到 1 就使用遞迴的概念將相鄰的 1 都設成 0,做完一次代表找到一個島。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
void mark(vector<vector<char>>& grid, int i, int j, int height, int width)
{
if(i < 0 || j < 0 || i >= height || j >= width || grid[i][j] != '1')
return;
grid[i][j] = '0';
mark(grid, i, j + 1, height, width);
mark(grid, i, j - 1, height, width);
mark(grid, i + 1, j, height, width);
mark(grid, i - 1, j, height, width);
}

int numIslands(vector<vector<char>>& grid) {
int height = grid.size();
if(!height)
return 0;
int width = grid[0].size(), numberOfRegions = 0;
for(int i = 0; i < height; ++i)
for(int j = 0; j < width; ++j)
if(grid[i][j] == '1')
mark(grid, i, j, height, width), ++numberOfRegions;
return numberOfRegions;
}
};