---
# System prepended metadata

title: garden

---

# garden
## 方法一
1. 先讀列數和行數，分別存入row和col
2. 開一個二維boolean陣列watered代表被澆過的地區，出
3. 設定一個變數un_water表沒被澆過的區塊數，初始化為二維陣列的大小
4. 設定一個變數n表澆水器的數量
5. while跑n次
6. 每次讀入一個澆水器座標
7. 確認澆水器有沒有在花園內
8. 用兩個for迴圈enumerate澆水器可澆的範圍
9. 先判定現在的區塊有沒有在花園內
10. 沒有的話，continue檢查下個區塊
11. 再判定這個區塊之前有沒有被澆到過了
12. 沒有澆過的話就紀錄成為有澆過，並把沒澆過的區塊數(un_water)減一
13. 等遍歷完所有可澆到的區塊後，繼續處理下一輪while
14. while結束後印出沒澆過的區塊數(un_water)
```c
#include<stdio.h>
#include<stdbool.h>

int main(int argc, char *argv[]){
  int row, col;
  scanf("%d %d", &col, &row);
  bool watered[row][col];
  for(int i = 0; i < row; i++)
    for(int j = 0; j < col; j++)
      watered[i][j] = false;
  int un_water = row * col;//the size of the garden
  int n;
  scanf("%d", &n);
  while(n-- > 0){
    int x,y;
    scanf("%d %d", &x, &y);
    if(x < 0 || y < 0 || x >= col/*index is from 0 to col - 1*/ || y >= row)//machine out of range of the garden
      continue;
    for(int i = y - 1; i <= y + 1; i++){//row
      for(int j = x -1; j <= x + 1; j++){//col
        if(i < 0 || j < 0 || i >= row || j >= col)//out of range of the garden
          continue;
        if(!watered[i][j]){
          //printf("water (%d,%d)\n",i ,j);//debug
          watered[i][j] = true;
          un_water--;
        }
      }
    }
  }
  printf("%d\n", un_water);
  return 0;
}
```
### 結果
![](https://i.imgur.com/jrpfPmM.png)

方法二
- 把方法一的判斷有沒有在區塊內變成函式的形式
- 取消使用un_water，改為在while結束後遍歷watered，印出沒澆過的區塊數
```c
#include<stdio.h>
#include<stdbool.h>
int row,col;
bool jud(int x,int y){
  if(x >= 0 && y >= 0 && x < col && y < row)
    return true;
  return false;
}
int main(void){
  scanf("%d %d", &row, &col);
  bool watered[row][col];
  for(int i = 0; i < row; i++)
    for(int j = 0; j < col; j++)
      watered[i][j] = false;
  int n;
  scanf("%d", &n);
  while(n-- > 0){
    int x,y;
    scanf("%d %d", &x, &y);
    if(x < 0 || y < 0 || x >= col/*index is from 0 to col - 1*/ || y >= row)//machine out of range of the garden
      continue;
    for(int i = y-1 ; i <= y+1; i++){
      for(int j = x-1; j <= x+1; j++){
        if(jud(i,j)){
          if(!watered[i][j]){
            //printf("water (%d,%d)\n",i,j);
            watered[i][j] = true;
          }
	}
      }
    }
    
  }
  int ans = 0;
  for(int i = 0; i < row; i++){
    for(int j = 0; j < col; j++){
      if(!watered[i][j])
        ans++;
    }
  }
  printf("%d\n",ans);
  return 0;
}

```
### 結果
![](https://i.imgur.com/F3g5wkb.png)
