1. 程式人生 > >八連塊問題:統計圖中相相連黑色區域的個數

八連塊問題:統計圖中相相連黑色區域的個數

oba 表白 class glob name python實現 檢查 check ntb

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



八連塊問題:統計圖中相相連黑色區域的個數