DFS---机器人活动区域

题目描述
现有一个机器人,可放置于 M × N 的网格中任意位置,每个网格包含一个非负整数编号,当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可以在网格间移动。

问题: 求机器人可活动的最大范围对应的网格点数目。

​说明:​

网格左上角坐标为 (0,0) ,右下角坐标为(m−1,n−1)
机器人只能在相邻网格间上下左右移动
示例1 输入如下网格

输出:6

说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6

示例2 输入如下网格

输出:1

说明:任意两个相邻网格的差值绝对值都大于1,机器人不能在网格间移动,只能在单个网格内活动,对应网格点数目为1

输入描述
第 1 行输入为 M 和 N

M 表示网格的行数
N 表示网格的列数
之后 M 行表示网格数值,每行 N 个数值(数值大小用 k 表示),数值间用单个空格分隔,行首行尾无多余空格。

M、 N、 k 均为整数
1 ≤ M,N ≤ 150
0 ≤ k ≤ 50
输出描述
输出 1 行,包含 1 个数字,表示最大活动区域的网格点数目,

行首行尾无多余空格。

用例1
输入
4 4
1 2 5 2
2 4 4 5
3 5 7 1
4 6 2 4
输出
6
说明
见描述中示例1,最大区域对应网格点数目为6

用例1
输入
2 3
1 3 5
4 1 3
输出
1
说明
见描述中示例2,最大区域对应网格点数目为1

M,N = map(int,input().split())
arrays = [list(map(int,input().split())) for _ in range(M)]
visited = [[False]*N for _ in range(M)]
offsets = ((-1,0),(0,-1),(1,0),(0,1))
def dfs(i,j,count):
    for offset in offsets:
        new_i = i+offset[0]
        new_j = j+offset[1]

        if (M>new_i>=0 and N>new_j>=0 and abs(arrays[new_i][new_j]-arrays[i][j])<=1 and not visited[new_i][new_j]):
            visited[new_i][new_j] = True
            count = dfs(new_i,new_j,count+1)
    return count
max_count = 0
for i in range(M):
    for j in range(N):
        if not visited[i][j]:
            visited[i][j]=True
            max_count = max(max_count,dfs(i,j,1))
print(max_count)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值