NYOJ—水池數目(DFS)
描述:
校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。
輸入:
第一行輸入一個整數N,表示共有N組測試資料
每一組資料都是先輸入該地圖的行數m(0 < m < 100)與列數n(0 < n < 100),然後,輸入接下來的m行每行輸入n個數,表示此處有水還是沒水(1表示此處是水池,0表示此處是地面)
輸出:
輸出該地圖中水池的個數。
要注意,每個水池的旁邊(上下左右四個位置)如果還是水池的話的話,它們可以看做是同一個水池。
樣例輸入:
2 3 4 1 0 0 0 0 0 1 1 1 1 1 0 5 5 1 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
分析:
通過DFS來解決此問題,從任意的‘1’開始,不停地把上下左右四個位置的部分用’0’代替。1次DFS後與初始的’1’連線的所有’1’就都被替換成’0’,這樣直到圖中不存在’1’為止。進行的DFS次數就是水池的數目了。
程式碼如下:
#include<cstdio>
using namespace std;
const int maxn = 100+5;
int p[maxn][maxn];
int r,c;
void dfs(int i,int j)
{
if(i-1>=0&&p[i-1][j]==1)
{
p[i-1 ][j]=0;
dfs(i-1,j);
}
if(i+1<r&&p[i+1][j]==1)
{
p[i+1][j]=0;
dfs(i+1,j);
}
if(j-1>=0&&p[i][j-1]==1)
{
p[i][j-1]=0;
dfs(i,j-1);
}
if(j+1<c&&p[i][j+1]==1)
{
p[i][j+1]=0;
dfs(i,j+1);
}
return ;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&r,&c);
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
scanf("%d",&p[i][j]);
}
}
int k=0;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(p[i][j]==1)// 每個點都確認一次是否為1
{
dfs(i,j);
k++;
}
}
}
printf("%d\n",k);
}
return 0;
}
我這裡寫麻煩了,應該將上下左右放在一個數組裡進行迴圈的
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//表示上下左右四個方向
相關推薦
NYOJ—水池數目(DFS)
描述: 校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。 輸入:
NYOJ-水池數目(dfs)
水池數目 描述: 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。 輸入: 第一行輸入一個整數N,表示共有N組測試資料 每一組
nyoj--27--水池數目(dfs)
水池數目 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,
NYOJ 27 水池數目 (dfs)
水池數目 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某
NYoj最少步數(DFS)
描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,
NYOJ 27 水池數目 (BFS,DFS)
水池數目 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,
NYOJ 27 水池數目(深搜或廣搜)
題目很簡單是最基礎的搜尋題 首先是深搜寫法,遞迴 程式碼如下: [cpp] view plaincopyprint? #include<stdio.h> #include<stdlib.h> int m[100][100],a,b;
The partial sum problem (DFS)nyoj
The partial sum problem 時間限制:1000 ms | 記憶體限制:65535 KB 輸入 There are multiple test cases. Each test case contains three lines.The first
DFS連通塊 NYOJ水池數目
題目描述 校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。 輸入 第一行輸入一個整數N,表示共有N組測試資料 每一組資料都是先輸入
NYOJ 27 水池數目 【DFS】
水池數目 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,
NYOJ 722 數獨(dfs)
數獨 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 數獨是一種運用紙、筆進行演算的邏輯遊戲。玩家需要根據9×9盤面上的已知數字,推理出所
nyoj 1276 機器裝置(DFS)
機器裝置 描述 Alpha 公司設計出一種節能的機器裝置。它的內部結構是由 N 個齒輪組成。整個機器裝置有 一個驅動齒輪,當啟動它時,它立即按 10,000 圈/小時轉速順時針轉動,然後它又帶動與它相切 的齒輪反方向,即逆時針轉動。齒輪之間互相作用,每個齒輪
nyoj 32 組合數(dfs)
描述 找出從自然數1、2、… 、n(0< n< 10)中任取r(0< r<=n)個數的所有組合。 輸入 輸入n、r。 輸出 按特定順序輸出所有組
NYOJ 32 組合數(dfs)
組合數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述找出從自然數1、2、... 、n(0<n<10)中任取r(0<r<=n)個數的所
nyoj 32-組合數(DFS)
組合數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述找出從自然數1、2、... 、n(0<n<10)中任取r(0<r<=n)個數的所有組合。 輸入輸入n、r。 輸出按特定順序輸出所有組合。 特定順序
[ACM] POJ 3740 Easy Finding (DFS)
cas oss miss 矩陣 org fin contest std size Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16202 Accepted: 4349
ECNU 3260 袋鼠媽媽找孩子(dfs)
highlight 另一個 () class div names 中一 ble problem 鏈接:http://acm.ecnu.edu.cn/problem/3260/ 題意: 給出一個x,y,k。求從左上角到(x,y)最短路徑不少於k而且最快到達(x,y)的迷宮。(
POJ 2386 Lake Counting(DFS)
poj 所有 tput algorithm space 答案 復雜度 for pre 題意:有一個大小為N×M的園子,雨後積起了水。八連通的積水被認為是連在一起的。求園子裏一共有多少水窪? * * * * W* (八連通指的就是左圖中相對W的*的部分)
HIT1946 希爾伯特分形曲線(dfs)
pic ios put 組成 快的 結束 return ext ati 補第二次期末考的題……發現代碼細節還需要加強啊……這樣一道題一直犯小錯誤。 題目鏈接: http://acm.hit.edu.cn/hoj/problem/view?id=1946 題目描述:
POJ - 3984 - 迷宮問題 (DFS)
define class ac代碼 ng- art clu cstring fff table 迷宮問題 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10936 Accep