一个n*n个方块的图,每个方块是白色或者黑色。
统计出相连的黑色块区域有多少个
相连:两个黑色块有公共顶点或者公共边
输入0代表白色 1代表黑色
测试用例:
1 0 0 1 0 0
0 0 1 0 1 0
0 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
0 1 0 1 0 0
答案:
有三块相连的黑色区域
python实现:
1 '''
2 对每方块进行遍历:
3 1 如果值是0或者-1 不进行操作
4 2 如果值是1 把值改为-1 标记一下 已经遍历过这个点
5 2.2 把这个点周围的8个点进行递归
6 2.3 累加器+1
7
8 '''
9 def countBlack( ):
10 global total
11 global graph
12 width = len( graph ) #图的宽度
13 height = len( graph[0] ) #图的长度
14 #进行遍历
15 for w in range( 1, width-1 ):
16 for h in range( 1,height-1 ):
17 #print((w, h))
18 if graph[w][h] == 1 :
19 #在这里调用递归,对这个方块周围8个方块操作
20 check( w , h)
21 total +=1
22 #递归调用的检查函数:如果值是1 就改成-1 标记代表遍历过,然后检查他周围8个点
23 def check( i, j):
24 global graph
25 if graph[i][j] == 1 :
26 graph[i][j] = -1
27 print((i,j))
28 check( i-1,j-1 ) #左上点
29 check( i-1,j ) #左
30 check( i-1 ,j+1 ) #左下
31 check( i, j-1 ) #上
32 check( i, j+1 ) #下
33 check( i+1 , j-1 ) #右上
34 check( i+1 , j ) #右
35 check( i+1 , j+1 ) #右下
36
37
38 if __name__ == "__main__":
39 graph = getGraph()
40 total = 0 #全局变量累加器
41 countBlack()
42
43 print( total )