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

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

 



转载于:https://www.cnblogs.com/Lin-Yi/p/7355404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值