代码随想录算法训练营第51天|101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104.建造最大岛屿

embedded/2024/10/23 0:52:13/

文章目录

  • 101. 孤岛的总面积
  • 102. 沉没孤岛
  • 103. 水流问题
  • 104.建造最大岛屿

101. 孤岛的总面积

卡码网 101. 孤岛的总面积
代码随想录

python">from collections import deque
n, m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]directions = [[1,0],[-1,0],[0,-1],[0,1]]def bfs(matrix, visited, x, y):area = 1que = deque([])que.append([x,y])flag = Falsewhile que:# 弹出一个点cur_x, cur_y = que.popleft()if cur_x == 0 or cur_x == len(matrix)-1 or cur_y ==0 or cur_y == len(matrix[0])-1:flag = True # 计算面积的同时判断是不是处理边界,如果是处于边界的话,就多返回一个true,只有不是边界的情况下才加到总面积上去。# 四个方向遍历(四个方向)for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_x < 0 or next_x >= len(matrix) or next_y < 0 or next_y >= len(matrix[0]):continueif not visited[next_x][next_y] and matrix[next_x][next_y] == 1:visited[next_x][next_y] = Trueque.append([next_x, next_y])area += 1return flag, area
res = 0for i in range(n):for j in range(m):if matrix[i][j] == 1 and not visited[i][j]:visited[i][j] = Trueflag, area = bfs(matrix, visited, i, j)if not flag:res += area# if bfs(matrix, visited, i, j)  == 1:#     res += 1
print(res)

102. 沉没孤岛

卡码网 102. 沉没孤岛
代码随想录

python">from collections import deque
n, m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]directions = [[1,0],[-1,0],[0,-1],[0,1]]def bfs(matrix, visited, x, y):area = 1que = deque([])que.append([x,y])flag = Falseback_up = deque([])while que:# 弹出一个点cur_x, cur_y = que.popleft()# 把遍历的所有点就记录下来,如果确定是一个孤岛,把这些左边置为0back_up.append([cur_x, cur_y])if cur_x == 0 or cur_x == len(matrix)-1 or cur_y ==0 or cur_y == len(matrix[0])-1:flag = True# 四个方向遍历(四个方向)for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_x < 0 or next_x >= len(matrix) or next_y < 0 or next_y >= len(matrix[0]):continueif not visited[next_x][next_y] and matrix[next_x][next_y] == 1:visited[next_x][next_y] = Trueque.append([next_x, next_y])area += 1if not flag:while back_up:cur_x, cur_y = back_up.popleft()matrix[cur_x][cur_y] = 0# return flag, area
res = 0for i in range(n):for j in range(m):if matrix[i][j] == 1 and not visited[i][j]:visited[i][j] = Truebfs(matrix, visited, i, j)
# print(res)
for i in range(len(matrix)):# print(" ".jion(map(str, matrix[i])))print(" ".join([str(item) for item in matrix[i]]).strip())

103. 水流问题

卡码网 103. 水流问题
代码随想录

python">from collections import deque
n, m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]directions = [[1,0],[-1,0],[0,-1],[0,1]]first = set()
second = set()def dfs(matrix, visited, x, y, node):if visited[x][y]:returnnode.add((x,y))visited[x][y] = Truefor i, j in directions:next_x = x + inext_y = y + jif (0 <= next_x < len(matrix) and 0<= next_y < len(matrix[0]) and matrix[next_x][next_y] >= matrix[x][y]):dfs(matrix, visited, next_x, next_y, node)# 右/上
for i in range(len(matrix)):dfs(matrix, visited, i, 0, first)
for j in range(len(matrix[0])):dfs(matrix, visited, 0, j, first)
# print(first)# visited需要重新初始化
visited = [[False] * m for _ in range(n)]
for i in range(len(matrix)):dfs(matrix, visited, i, len(matrix[0])-1, second)
for j in range(len(matrix[0])):dfs(matrix, visited, len(matrix)-1, j, second)
# print(second)res = first & second
# print(res)for x,y in res:print(f'{x} {y}')

104.建造最大岛屿

卡码网 104.建造最大岛屿
代码随想录

python">from collections import deque
n,m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))
# 记录遍历
visited = [[False]*m for _ in range(n)]
# 记录岛屿编号
marked = [[0]*m for i in range(n)]directions = [[-1,0],[1,0],[0,-1],[0,1]]def bfs(matrix, visited, x, y, marked, isoland_cnt):area = 1que = deque([])que.append([x,y])# 记录新的岛屿marked[x][y] = isoland_cntwhile que:cur_x, cur_y = que.popleft()for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_x < 0 or next_x >= len(matrix) or next_y < 0 or next_y >= len(matrix[0]):continueif not visited[next_x][next_y] and matrix[next_x][next_y] == 1:visited[next_x][next_y] = Truemarked[next_x][next_y] = isoland_cntque.append([next_x, next_y])area += 1return areaisoland_cnt = 1
area_dict = dict()
for i in range(n):for j in range(m):if matrix[i][j] == 1 and not visited[i][j]:visited[i][j] = Truearea = bfs(matrix, visited, i, j, marked, isoland_cnt)area_dict[isoland_cnt] = areaisoland_cnt += 1res = 0
# 开始填充
for i in range(n):for j in range(m):if marked[i][j] == 0:max_area = 1isoland_set = set()for x,y in directions:next_x = x + inext_y = y + jif (0<= next_x < n and 0 <= next_y < m and marked[next_x][next_y] != 0 and marked[next_x][next_y] not in isoland_set):max_area += area_dict[marked[next_x][next_y]]isoland_set.add(marked[next_x][next_y])res = max(max_area, res)
if res == 0:print(n*m)
else:print(res)

http://www.ppmy.cn/embedded/129696.html

相关文章

web网页QQ登录

代码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>QQ登录ent</title> </head> <style>ul > li{list-style: none; } a …

【React】useLayoutEffect、useInsertionEffect

useLayoutEffect useLayoutEffect和useEffect有什么区别呢&#xff1f; useEffect的cb&#xff0c;准确来说&#xff0c;是异步调用的&#xff0c;会等主线程任务执行完成&#xff0c;D0M更新&#xff0c;JS执行完成&#xff0c;视图绘制完成&#xff0c;才执行。 useLayout…

<a-table>行数据增加点击事件并获取点击行的数据+自定义button按事件

先看代码&#xff1a; 在 Ant - Design - Vue 的<a - table>组件中&#xff0c;通过customRow属性可以为表格的每一行添加自定义的行为和样式。当设置customRow为一个返回包含onClick函数的对象的函数时&#xff0c;实际上是在为每一行添加一个点击事件监听器。 在a-tabl…

应用层协议编写,序列化反序列化,网络版计算器,Json序列反序列化工具,条件编译,结合网络协议栈理解协议定制

我们前面说了tcp与udp传输层协议的使用&#xff0c;现在我们来看看传输层的上层应用层&#xff0c;我们是如何约定协议的&#xff0c;是如何让我们的数据封装的&#xff1b; 1.应用层协议 为什么会有应用层协议呢&#xff1f;我们在前面tcp和udp服务器客户端代码实现时就已经…

vnc+wsl2试用

vncwsl2试用 一、vnc VNC&#xff08;Virtual Network Computing&#xff09;是一种远程桌面共享技术&#xff0c;允许用户通过网络远程访问和控制另一台计算机的桌面界面。它基于客户端-服务器架构&#xff0c;主要用于在不同操作系统之间进行远程连接。 工作原理 客户端和…

数据脱敏方案总结

什么是数据脱敏 数据脱敏的定义 数据脱敏百度百科中是这样定义的&#xff1a; 数据脱敏&#xff0c;指对某些敏感信息通过脱敏规则进行数据的变形&#xff0c;实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集…

.net framework 3.5sp1安装错误卡住不动怎么解决

解决 .NET Framework 3.5 SP1 安装错误卡住的问题&#xff0c;可以尝试以下几种方法&#xff1a; 1.使用 DISM 工具&#xff1a; 将下载的 NetFx3.cab 文件放置在 C:\Windows 文件夹下。 以管理员身份打开命令提示符&#xff0c;输入以下命令&#xff1a; dism /online /En…

应对 .DevicData-X-XXXXXXXX 勒索病毒:防御与恢复策略

引言 随着信息技术的快速发展&#xff0c;网络安全问题愈发严峻。勒索病毒作为一种恶性网络攻击手段&#xff0c;已成为企业和个人面临的重大威胁之一。尤其是 .DevicData-X-XXXXXXXX 勒索病毒&#xff0c;其通过加密用户数据并勒索赎金&#xff0c;给受害者带来了巨大的经济损…