# 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;
}
```
### 結果

方法二
- 把方法一的判斷有沒有在區塊內變成函式的形式
- 取消使用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;
}
```
### 結果
