C代码:DFS
void dfs(int** grid, int x, int y, int rows, int cols, int* sum) {
if (x < 0 || x >= rows || y < 0 || y >= cols || grid[x][y] == 0) { // 遇到边界、水:++
(*sum)++;
return;
}
if (grid[x][y] == 2) { // 遍历过的位置,直接返回;
return;
}
grid[x][y] = 2;
dfs(grid, x - 1, y, rows, cols, sum);
dfs(grid, x + 1, y, rows, cols, sum);
dfs(grid, x, y - 1, rows, cols, sum);
dfs(grid, x, y + 1, rows, cols, sum);
}
int islandPerimeter(int** grid, int gridSize, int* gridColSize){
int rows = gridSize;
int cols = gridColSize[0];
int sum = 0;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (grid[i][j] == 1) {
dfs(grid, i, j, rows, cols, &sum);
return sum;
}
}
}
return 0;
}