99. 岛屿数量 深搜
每一块的上下左右都遍历过了之后,这块陆地就遍历完了。是深搜,不是广搜
深搜:递归
def dfs():
if .....:
终止条件
dfs(子节点)
directions = [[0,1],[1,0],[0,-1],[-1,0]]def dfs(grid, visited, x, y):if grid[x][y] == 0 or visited[x][y]:returnvisited[x][y] = Truefor i in range(4):next_x = x + directions[i][0]next_y = y + directions[i][1]if next_x < 0 or next_x >=n or next_y < 0 or next_y >= m:continuedfs(grid, visited, next_x, next_y)if __name__ == '__main__':n, m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))visited = [[False]*m for _ in range(n)]res = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:res += 1 dfs(grid, visited, i, j)print(res)
99. 岛屿数量 广搜
广搜用队列(deque),
先加进去第一个节点
while que:
cur = que.popleft()
for cur_child in cur_children:
que.append(cur_child)
from collections import deque
directions = [[0,1],[1,0],[0,-1],[-1,0]]def bfs(grid, visited, x, y):que = deque([])que.append([x,y])visited[x][y] = Truewhile que:cur_x, cur_y = que.popleft()for i in range(4):next_x = cur_x + directions[i][0]next_y = cur_y + directions[i][1]if next_x < 0 or next_x >=n or next_y < 0 or next_y >= m:continueelif grid[next_x][next_y] == 1 and not visited[next_x][next_y]:que.append([next_x, next_y])visited[next_x][next_y] = Trueif __name__ == '__main__':n, m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))visited = [[False]*m for _ in range(n)]res = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:res += 1 bfs(grid, visited, i, j)print(res)
100. 岛屿的最大面积
dfs
# dfs,bfs都行
# dfs
directions = [[0,1],[1,0],[0,-1],[-1,0]]
max_area = 0
area = 0def dfs(grid, visited, x, y):global areaglobal max_areaif grid[x][y] == 0 or visited[x][y] == True:returnvisited[x][y] = Truearea += 1max_area = max(max_area, area)# print("area=", area)# print("max_area=", max_area)for i in range(4):next_x = x + directions[i][0]next_y = y + directions[i][1]if next_x < 0 or next_x >= n or next_y < 0 or next_y >= m:continuedfs(grid, visited, next_x, next_y)if __name__ == "__main__":n,m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))# n,m = 4, 5# grid = [[1,1,0,0,0],[1,1,0,0,0],[0,1,1,0,0],[0,0,0,1,1]]visited = [[False]*m for _ in range(n)]for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:area = 0dfs(grid, visited, i, j)print(max_area)
bfs
# dfs,bfs都行
# bfs
from collections import deque
directions = [[0,1],[1,0],[0,-1],[-1,0]]def bfs(grid, visited, x, y):area = 0que = deque()que.append([x,y])while que:cur_x, cur_y = que.popleft()if grid[cur_x][cur_y] == 1 and not visited[cur_x][cur_y]:area += 1visited[cur_x][cur_y] = Truefor i in range(4):next_x = cur_x + directions[i][0]next_y = cur_y + directions[i][1]if next_x < 0 or next_x >= n or next_y < 0 or next_y >=m:continue# if grid[next_x][next_y] == 1 and not visited[next_x][next_y]:que.append([next_x, next_y])return areaif __name__ == "__main__":n,m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))visited = [[False]*m for _ in range(n)]max_area = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:# area = 0# global max_areamax_area = max(max_area, bfs(grid, visited, i, j))print(max_area)