八连块问题:统计图中相相连黑色区域的个数

Posted 稀里糊涂林老冷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八连块问题:统计图中相相连黑色区域的个数相关的知识,希望对你有一定的参考价值。

一个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 )

 



以上是关于八连块问题:统计图中相相连黑色区域的个数的主要内容,如果未能解决你的问题,请参考以下文章

小白书 黑白图像DFS/Flood Fill

统计八连块

图1(八连块)

20612统计八连块

用DFS求连通块(种子填充)

油田(Oil Deposits)-用DFS求连通块