# 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)