nyoj27水池數目

2021-06-27 05:37:46 字數 1402 閱讀 5717

時間限制:

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...