某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开;
给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器;
输入描述
第一行输入m,n表示长宽,满足1<m,n<=20;后面输入m行,每行有n个0或1的整数,整数间使用一个空格隔开,表示该行已停车情况,其中0表示空位,1表示已停;
输出描述
最少需要打开监控器的数量;
用例
输入
3 3
0 0 0
0 1 0
0 0 0
输出
5
说明
无
示例2
3 3
1 0 0
0 1 0
0 0 0
输出
6
思想:循环每个车位,当车位为1时,跳出当前循环,不执行后面for语句。否则查询上下左右是否有1的车位,如果有一个有,设置count+1 m,n = map(int,input().split()) matrix = [list(map(int,input().split())) for _ in range(m)] def getresult(): # 计数 cnt = 0 # 上下左右偏移 offset = ((-1,0),(1,0),(0,-1),(0,1)) #循环每一个车位 for i in range(m): for j in range(n): # 车位上有车,加个监视器,开始下一层循环 if matrix[i][j] == 1: cnt += 1 continue # 车位上没有车,遍历上下左右是否有车,任一个方向有车加个监视器,退出,避免重复加监视器 for x,y in offset: mx = x + i ny = y + j if 0 <= mx < m and 0 <= ny < n and matrix[mx][ny] == 1: cnt += 1 break print(cnt) if __name__ == '__main__': getresult()