時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:4 描述
南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。
輸入第一行輸入乙個整數n,表示共有n組測試資料
每一組資料都是先輸入該地圖的行數m(0輸出
輸出該地圖中水池的個數。
要注意,每個水池的旁邊(上下左右四個位置)如果還是水池的話的話,它們可以看做是同乙個水池。
樣例輸入
2樣例輸出3 41 0 0 0
0 0 1 1
1 1 1 0
5 51 1 1 1 0
0 0 1 0 1
0 0 0 0 0
1 1 1 0 0
0 0 1 1 1
2所謂深度優先搜尋,還是我自己的理解,就是所有的方向乙個乙個的搜,沿著樹的深度遍歷節點,盡可能深的搜尋樹。找到一張圖圖。3
這樣就很好理解了~其中往下搜尋是用的遞迴(或者用棧去實現),而且有的要記得取消標記,因為遞迴會返回,也就是回溯。。
好了,回到題目。
#include #include int num[102][102];
int l = 0; //l用來記錄水池的個數
void fun(int p, int q) //下面就是從是水池的那一點開始找它的上下左右,是水池的就標記成0,然後向下遞迴
if(num[p-1][q] == 1)
if(num[p][q-1] == 1)
if(num[p][q+1] == 1)
}int main()
}for(i=1; i<=a; i++)}}
printf("%d\n", l);
}return 0;
}
哦可~~
貼最優**
#include #define n 102
#define m 102
int map[n][m];
void search(int i,int j)
if(map[i][j+1])
if(map[i-1][j])
if(map[i+1][j])
}int main()
printf("%d\n",count);
}return 0;
}
短小精悍。。。。。 NYOJ 27 水池數目
includeint n int map 101 101 int row,col int der 4 2 用二維陣列記錄四個方向 void count int x,int y int main for i 0 i row i for j 0 j col j 判斷不為0 的點 printf d n n...
NYOJ 27 水池數目
描述 校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。輸入第一行輸入乙個整數n,表示共有n組測試資料 每一組資料都是先輸入該地圖的行數m 0輸出 輸出該地圖中水池的個數...
NYOJ 27 水池數目
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。輸入第一行輸入乙個整數n,表示共有n...