蓝桥杯 全球变暖 python

题目描述

你有一张某海域 NxNNxN 像素的照片,"."表示海洋、"#"表示陆地,如下所示:

.......

.##....

.##....

....##.

..####.

...###.

.......

其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

例如上图中的海域未来会变成如下样子:

.......

.......

.......

.......

....#..

.......

.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

输入描述

第一行包含一个整数 N\ (1 \leq N \leq 1000)N (1≤N≤1000)。

以下 NN 行 NN 列代表一张海域照片。

照片保证第 1 行、第 1 列、第 NN 行、第 NN 列的像素都是海洋。、

输出一个整数表示答案。

输入输出样例

示例

输入

7
.......
.##....
.##....
....##.
..####.
...###.
.......

输出

1

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
from collections import *
def bfs(x,y):
    global flag
    q=deque()
    dirs=[(1,0),(0,1),(-1,0),(0,-1)]   #四个方向
    vis[x][y]=1
    q.append((x,y))
    while q:
        t=q.popleft()
        tx,ty=t[0],t[1]
        if map[tx][ty+1]=='#' and map[tx][ty-1]=='#' and map[tx+1][ty]=='#' and map[tx-1][ty]=='#':   #搜一个点的四周
            flag=1              #如果四周都有陆地,那么这是一个高地,不会被淹没
        for i in range(4):      #扩展(tx,ty)的四个邻居
            nx=tx+dirs[i][0]
            ny=ty+dirs[i][1]
            if vis[nx][ny]==0 and map[nx][ny]=='#':
                q.append((x,y))
                vis[nx][ny]=1   #标记点
n=int(input())
ans=0    #统计被淹没岛的数量
map=[]  #地图
for i in range(n):
    map.append(list(input()))
vis=[[0]*n for _ in range(n)]  #标记是否被搜过
for i in range(n):             #bfs所有的点
    for j in range(n):
        if vis[i][j]==0 and map[i][j]=='#':
            flag=0             #假设这个岛被淹
            bfs(i,j)           #找这个岛中是否有高地
            if flag==0:
                ans+=1
print(ans)

 

你可能感兴趣的:(蓝桥杯,python,图搜索算法)