Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7ff07aa

Browse files
authored
Update 0102.沉没孤岛.md
Update 0102.沉没孤岛.md
1 parent f16c640 commit 7ff07aa

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

‎problems/kamacoder/0102.沉没孤岛.md‎

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,128 @@ int main() {
138138

139139
### Java
140140

141+
```JAVA
142+
143+
import java.util.Scanner;
144+
145+
public class Main {
146+
static int[][] dir = { {-1, 0}, {0, -1}, {1, 0}, {0, 1} }; // 保存四个方向
147+
148+
public static void dfs(int[][] grid, int x, int y) {
149+
grid[x][y] = 2;
150+
for (int[] d : dir) {
151+
int nextX = x + d[0];
152+
int nextY = y + d[1];
153+
// 超过边界
154+
if (nextX < 0 || nextX >= grid.length || nextY < 0 || nextY >= grid[0].length) continue;
155+
// 不符合条件,不继续遍历
156+
if (grid[nextX][nextY] == 0 || grid[nextX][nextY] == 2) continue;
157+
dfs(grid, nextX, nextY);
158+
}
159+
}
160+
161+
public static void main(String[] args) {
162+
Scanner scanner = new Scanner(System.in);
163+
int n = scanner.nextInt();
164+
int m = scanner.nextInt();
165+
int[][] grid = new int[n][m];
166+
167+
for (int i = 0; i < n; i++) {
168+
for (int j = 0; j < m; j++) {
169+
grid[i][j] = scanner.nextInt();
170+
}
171+
}
172+
173+
// 步骤一:
174+
// 从左侧边,和右侧边 向中间遍历
175+
for (int i = 0; i < n; i++) {
176+
if (grid[i][0] == 1) dfs(grid, i, 0);
177+
if (grid[i][m - 1] == 1) dfs(grid, i, m - 1);
178+
}
179+
180+
// 从上边和下边 向中间遍历
181+
for (int j = 0; j < m; j++) {
182+
if (grid[0][j] == 1) dfs(grid, 0, j);
183+
if (grid[n - 1][j] == 1) dfs(grid, n - 1, j);
184+
}
185+
186+
// 步骤二、步骤三
187+
for (int i = 0; i < n; i++) {
188+
for (int j = 0; j < m; j++) {
189+
if (grid[i][j] == 1) grid[i][j] = 0;
190+
if (grid[i][j] == 2) grid[i][j] = 1;
191+
}
192+
}
193+
194+
for (int i = 0; i < n; i++) {
195+
for (int j = 0; j < m; j++) {
196+
System.out.print(grid[i][j] + " ");
197+
}
198+
System.out.println();
199+
}
200+
201+
scanner.close();
202+
}
203+
}
204+
205+
206+
```
207+
208+
141209
### Python
142210

211+
```python
212+
213+
def dfs(grid, x, y):
214+
grid[x][y] = 2
215+
directions = [(-1, 0), (0, -1), (1, 0), (0, 1)] # 四个方向
216+
for dx, dy in directions:
217+
nextx, nexty = x + dx, y + dy
218+
# 超过边界
219+
if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):
220+
continue
221+
# 不符合条件,不继续遍历
222+
if grid[nextx][nexty] == 0 or grid[nextx][nexty] == 2:
223+
continue
224+
dfs(grid, nextx, nexty)
225+
226+
def main():
227+
n, m = map(int, input().split())
228+
grid = [[int(x) for x in input().split()] for _ in range(n)]
229+
230+
# 步骤一:
231+
# 从左侧边,和右侧边 向中间遍历
232+
for i in range(n):
233+
if grid[i][0] == 1:
234+
dfs(grid, i, 0)
235+
if grid[i][m - 1] == 1:
236+
dfs(grid, i, m - 1)
237+
238+
# 从上边和下边 向中间遍历
239+
for j in range(m):
240+
if grid[0][j] == 1:
241+
dfs(grid, 0, j)
242+
if grid[n - 1][j] == 1:
243+
dfs(grid, n - 1, j)
244+
245+
# 步骤二、步骤三
246+
for i in range(n):
247+
for j in range(m):
248+
if grid[i][j] == 1:
249+
grid[i][j] = 0
250+
if grid[i][j] == 2:
251+
grid[i][j] = 1
252+
253+
# 打印结果
254+
for row in grid:
255+
print(' '.join(map(str, row)))
256+
257+
if __name__ == "__main__":
258+
main()
259+
260+
```
261+
262+
143263
### Go
144264

145265
### Rust

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /