1. 程式人生 > >nyoj 水池數目

nyoj 水池數目

水池數目

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4
描述
南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。
輸入
第一行輸入一個整數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

//#include<stdio.h>
//#include<string.h>
//bool map[101][101];
//void dfs(int i,int j)
//{   
//	 if(i-1>=0&&j>=0&&map[i-1][j]==1)  //向上遍歷 
//	   {
//	   	  map[i-1][j]=0;
//	   	  dfs(i-1,j);
//	   }
//	 if(i+1>=0&&j>=0&&map[i+1][j]==1)//向下 遍歷 
//	  {
//	  	 map[i+1][j]=0;
//	  	 dfs(i+1,j);
//	  }
//	  if(i>=0&&j-1>=0&&map[i][j-1]==1)//向左 遍歷 
//	  {
//	  	 map[i][j-1]=0;
//	  	 dfs(i,j-1);
//	  }
//	  if(i>=0&&j+1>=0&&map[i][j+1]==1)//向右 遍歷 
//	  {
//	  	 map[i][j+1]=0;
//	  	 dfs(i,j+1);
//	  }
//}
//int main()
// {
//    
//     int i,j,n,m;
// 	 int sum;
// 	 int T;
// 	 scanf("%d",&T);
// 	 while(T--)
// 	  {
// 	  	 scanf("%d%d",&n,&m);
// 	  	 memset(map,0,sizeof(map));
// 	  	 sum=0;
// 	  	 for(i=0;i<n;i++)
// 	  	  for(j=0;j<m;j++)
// 	  	    scanf("%d",&map[i][j]);
// 	  	 for(i=0;i<n;i++)
// 	  	  for(j=0;j<m;j++)
// 	  	   {
// 	  	   	   if(map[i][j]==1)
// 	  	   	    {
// 	  	   	    	 sum++;
// 	  	   	    	 map[i][j]=0;
// 	  	   	    	 dfs(i,j);
// 	  	   	    }
// 	  	   }
// 	  	printf("%d\n",sum);
// 	  }
// 	return 0;
// }
// 
#include<cstdio>
int map[101][101];
void dfs(int i,int j)
  {
  	  map[i][j]=0;
  	if(i-1>=0&&j>=0&&map[i-1][j]==1)
  	  dfs(i-1,j);
  	if(i+1>=0&&j>=0&&map[i+1][j]==1)
  	  dfs(i+1,j);
  	if(i>=0&&j+1>=0&&map[i][j+1]==1)
  	  dfs(i,j+1);
  	if(i>=0&&j-1>=0&&map[i][j-1]==1)
  	  dfs(i,j-1);
  }
int main()
 {
 	 int T;
 	 int n,m;
 	 int i,j;
 	 int sum;
 	 scanf("%d",&T);
 	 while(T--)
 	 {
 	 	 scanf("%d%d",&n,&m);
 	 	 for(i=0;i<n;i++)
 	 	  for(j=0;j<m;j++)
 	 	    scanf("%d",&map[i][j]);
 	 	 sum=0;
 	 	  for(i=0;i<n;i++)
 	 	    for(j=0;j<m;j++)
 	 	     {
 	 	     	if(map[i][j]==1)
 	 	     	 {
 	 	     	 	 sum++;
 	 	     	 	 dfs(i,j);
 	 	     	 }
 	 	     }
 	 	printf("%d\n",sum);
 	 }
 	 return 0;
 } 


相關推薦

DFS連通塊 NYOJ水池數目

題目描述 校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。 輸入 第一行輸入一個整數N,表示共有N組測試資料 每一組資料都是先輸入

NYOJ水池數目(DFS)

描述: 校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。 輸入:

nyoj 水池數目

題目27 題目資訊 執行結果 本題排行 討論區 水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了

NYOJ-水池數目(dfs)

水池數目 描述: 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。 輸入: 第一行輸入一個整數N,表示共有N組測試資料 每一組

NYOJ水池數目

第一行輸入一個整數N,表示共有N組測試資料 每一組資料都是先輸入該地圖的行數m(0<m<100)與列數n(0<n<100),然後,輸入接下來的m行每行輸入n個數,表示此 處有

NYOJ水池數目

#include<stdio.h> #include<string.h> int a[105][105],b[105][105]; void fun(int x,int y) {     if(!a[x][y]||b[x][y])     return ;     b[x][y]=1

nyoj 27水池數目

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地

nyoj--27--水池數目(dfs)

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,

NYOJ 27 水池數目 【DFS】

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,

nyoj 題目27 水池數目

 水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該

NYOJ 27 水池數目(DFS)

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,

nyoj 27 水池數目【遞迴】

順序查詢每找到一個水池就遞迴找和它(四周)相鄰的水池。    水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊

NYOJ 27 水池數目(深搜或廣搜)

題目很簡單是最基礎的搜尋題 首先是深搜寫法,遞迴 程式碼如下: [cpp] view plaincopyprint? #include<stdio.h> #include<stdlib.h> int m[100][100],a,b;  

NYOJ 27 水池數目 (BFS,DFS)

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,

nyoj 27水池數目

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖

NYOJ 27 水池數目

#include<stdio.h> int n; int map[101][101]; int row, col; int der[4][2]={{0, 1},{1, 0},{0 , -1},{-1, 0}};//用二維陣列記錄四個方向 void count

NYOJ 27 水池數目(dfs)

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個

深搜 ,廣搜,佇列 nyoj 27 水池數目

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,

nyoj 27 水池數目 搜尋

水池數目 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,

nyoj ACM:水池數目(dfs)

水池數目 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算