八連塊問題:統計圖中相相連黑色區域的個數
阿新 • • 發佈:2017-08-14
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 )
八連塊問題:統計圖中相相連黑色區域的個數