图论题2
- 海岸线计算
题目描述
给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。
你可以假设矩阵外均被水包围。在矩阵中恰好拥有一个岛屿,假设组成岛屿的陆地边长都为 1,请计算海岸线,即:岛屿的周长。岛屿内部没有水域。
输入描述
第一行包含两个整数 N, M,表示矩阵的行数和列数。之后 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。
输出描述
输出一个整数,表示岛屿的周长。
输入示例
5 5
0 0 0 0 0
0 1 0 1 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0
输出示例
14
提示信息
岛屿的周长为 14。
题解思路:这道题乍一看感觉要用dfs和bfs,但是其实要用到小学数学的知识。如果有相邻边,那么就要减去2,那么这题其实就有公式了,那就是n4-2b(n为陆地数,b为相邻边数)
具体实现代码如下:
点击查看代码
n,m=map(int,input().split())
graph=[]
for _ in range(n):
graph.append(list(map(int,input().split())))
land_cnt=0
adj=0
for i in range(n):
for j in range(m):
if graph[i][j]==1:
land_cnt+=1
if i>0 and graph[i-1][j]==1:
adj+=1
if j>0 and graph[i][j-1]==1:
adj+=1
ans=land_cnt*4-adj*2
print(ans)

浙公网安备 33010602011771号