【DFS题型七/连通块】最大岛屿

题目描述:

这一天蒜头君生日,他的朋友们一起来给蒜头君买一个大的蛋糕过生日。游戏做完后到了切蛋糕的时刻了,朋友们知道蒜头君喜欢吃蛋糕,便让蒜头君自己给自己切一块最大的。蒜头君看朋友们这么热情也就不客气了。

这块蛋糕是由 R \times CR×C 的网格构成,每个网格上面都放有不同的水果。蒜头君把这些水果分为两类,一类是自己喜欢吃的水果,用’#‘来表示;一类是自己不喜欢吃的水果,用’.'来表示。

蒜头君对切出的蛋糕有如下要求:

切出的蛋糕连成一块(可以不为矩形,但必须在网格上连通)
切出的蛋糕只包含自己喜欢吃的水果
请问,蒜头君最大可以吃到多大的蛋糕?

输入格式
第一行输入两个被空格隔开的整数 R(1 \le R \le 1000)R(1≤R≤1000) 和 C(1 \le C \le 1000)C(1≤C≤1000)。

然后会有一个 R \times CR×C 的网格,由’#‘和’.'组成。

输出格式
输出一个整数,表示蒜头君可以吃到的蛋糕最大是多少(即对应到网格中的格子数)。
输入样例:
5 6
.#…
…#…
…#…#
…###.
.#…
输出样例:
5

n,m=map(int,input().split())
grid=[]
for i in range(n):
    list1=list(input())
    grid.append(list1)
n=len(grid)
m=len(grid[0])
def bfs(x,y,cnt):
    global ans
    if grid[x][y]=='#':
        grid[x][y]='.'
        cnt+=1
        if cnt > ans:
            ans = cnt
        for dx,dy in [(1,0),(0,1),(-1,0),(0,-1)]:
            x1=dx+x
            y1=dy+y
            if 0<=x1<n and 0<=y1<m:
                bfs(x1,y1,cnt)
    else:
        return #结束此次步骤

ans=0
for i in range(n):
    for j in range(m):
        if grid[i][j]=='#':
            bfs(i,j,0)
        else:
            continue #小循环继续
print(ans)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值