---
# System prepended metadata

title: k930. P7. 興建圍籬 (Fence)

---

# k930. P7. 興建圍籬 (Fence)
## 題目連結: [k930](https://zerojudge.tw/ShowProblem?problemid=k930)
## 解題想法
* `table`紀錄格子是花地或空地
* `found`紀錄格子是否被找到
* 判斷要不要放圍籬的方法: 看花地旁邊的格子是不是空地(上下左右都要看)
-------------------------
1. 先按照順序找花地
2. 如果那格花地沒被找過，就進入`garden()`
3. 進入`garden()`後，判斷當前格子的上下左右是花地或空地
4. 如果上下左右是花地，就`garden()`那格格子，形成遞迴
5. 如果上下左右是空地，就代表要放圍籬了
6. 最後把`garden()`的回傳值加入到`total`陣列
7. `total`排序，照順序輸出
## 程式碼
```python=
def garden(x,y):
    global found, table
    count = 0
    found[x][y] = 1
    if table[x][y-1] == 0 and found[x][y-1] == 0:
        count += 1
    elif table[x][y-1] == 1 and found[x][y-1] == 0:
        count += garden(x,y-1)
    if table[x][y+1] == 0 and found[x][y+1] == 0:
        count += 1
    elif table[x][y+1] == 1 and found[x][y+1] == 0:
        count += garden(x,y+1)
    if table[x-1][y] == 0 and found[x-1][y] == 0:
        count += 1
    elif table[x-1][y] == 1 and found[x-1][y] == 0:
        count += garden(x-1,y)
    if table[x+1][y] == 0 and found[x+1][y] == 0:
        count += 1
    elif table[x+1][y] == 1 and found[x+1][y] == 0:
        count += garden(x+1,y)
    return count

#start
x,y = map(int,input().split())
found = [[0 for i in range(y)] for j in range(x)]
table = []
for i in range(x):
    table.append([int(j) for j in input().split()])
    

total = []
for i in range(1,x):
    for j in range(1,y):
        if found[i][j] == 0 and table[i][j] == 1:
            found[i][j] = 1
            total.append(garden(i,j))

total.sort()
for i in total:
    print(i,end = " ")
```
*(本題在Zero Judge上只通過了約一半的測資，剩下都TLE)*
