题目描述
一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入格式
第一行两个整数代表矩阵大小 n 和 m。
接下来 n 行,每行一个长度为 m 的只含字符 0
到 9
的字符串,代表这个 n \times mn×m 的矩阵。
输出格式
一行一个整数代表细胞个数。
输入输出样例
输入 #1复制
4 10 0234500067 1034560500 2045600671 0000000089
输出 #1复制
4
说明/提示
数据规模与约定
对于 100\%100% 的数据,保证 1 \le n,m \le 1001≤n,m≤100。
n,m=map(int,input().split())
l=[list(map(int,input())) for i in range(n)]
#print(l)
def dfs(x,y):
l[x][y]=0
for (a,b) in [(0,1),(1,0),(-1,0),(0,-1)]:
x1=x+a
y1=y+b
if 0<=x1<n and 0<=y1<m and l[x1][y1]!=0:
dfs(x1, y1)
return
sum=0
for i in range(n):
for j in range(m):
if l[i][j]!=0:
dfs(i,j)
sum+=1
print(sum)
#print(l)
先遍历图的所有值,若不为0则进入bfs进行涂色,
通过bfs将该值周围所有的非零值都改为0(上色)
然后bfs结束对sum进行加一计数
该题有个关键就是上色步骤l[x][y]=0到底在什么时候进行,应是每访问一次就进行涂色,避免边界的非零值无法被上色。
但是不能ac,不知道问题出在哪。