目录

207图论孤岛的总面积

207、【图论】孤岛的总面积

题目

https://i-blog.csdnimg.cn/direct/9619c735005540afb4c597dd7111dee1.png https://i-blog.csdnimg.cn/direct/1550feec4a194f438fd85318f5edd45a.png

思路

相比于 ,就是在这个代码的基础上。先遍历边界,将边界连接的岛屿变为0,然后再计算一遍当前为1的岛屿面积。 https://i-blog.csdnimg.cn/direct/55801e3fe8b1438999511de4b42b550a.png https://i-blog.csdnimg.cn/direct/438d46ce6e4941538dc6fa47f73202a5.png

代码实现

import collections n, m = list(map(int, input().split())) graph = [] for _ in range(n): graph.append(list(map(int, input().split()))) directions = [[0, 1], [0, -1], [-1, 0], [1, 0]] res = 0 def traversal(i, j): que = collections.deque() que.append([i, j]) graph[i][j] = 0 global res res += 1 while que: x, y = que.popleft() for move_x, move_y in directions: next_x, next_y = x + move_x, y + move_y if next_x < 0 or next_x >= n or next_y < 0 or next_y >= m: continue elif graph[next_x][next_y] == 1: res += 1 graph[next_x][next_y] = 0 que.append([next_x, next_y]) for i in range(n): if graph[i][0] == 1: traversal(i, 0) if graph[i][m - 1] == 1: traversal(i, m - 1) for i in range(m): if graph[0][i] == 1: traversal(0, i) if graph[n - 1][i] == 1: traversal(n - 1, i) res = 0 for i in range(n): for j in range(m): if graph[i][j] == 1: traversal(i, j) print(res) 参考文章: