zoukankan      html  css  js  c++  java
  • 八连块问题:统计图中相相连黑色区域的个数

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


  • 相关阅读:
    基础--补习汇编笔记--1
    SpProcPool阅读笔记--1
    一般树--common tree
    code-reading-notes--xml 解析
    code-reading-notes--libyang-1
    linux--rbtree 解惑 insert
    记录一次手动杀毒过程
    B-Tree概念
    db2 -- 存储过程01
    sql server 带输入输出参数的分页存储过程(效率最高)
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7355404.html
Copyright © 2011-2022 走看看