点击打开链接

Oil Deposits

Time
Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 21383    Accepted Submission(s): 12319

Problem Description
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It then analyzes each
plot separately, using sensing equipment to determine whether or not the plot contains oil. A plot containing oil is called a pocket. If two pockets are adjacent, then they are part of the same oil deposit. Oil deposits can be quite large and may contain numerous
pockets. Your job is to determine how many different oil deposits are contained in a grid. 
 
Input
The input file contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise 1 <= m <= 100 and 1 <= n <= 100. Following
this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*', representing the absence of oil, or `@', representing an oil pocket.
 
Output
For each grid, output the number of distinct oil deposits. Two different pockets are part of the same oil deposit if they are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
 
Sample Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
 
Sample Output
0
1
2
2


Select Code
#include <stdio.h>
#include <iostream>
using namespace std; char s[102][102];
int m,n;
int i,j; void dfs(int x,int y)
{
if(x<1||x>m||y<1||y>n)
return ; // 函数返回值为空
if(s[x][y]!='@')
return ;
s[x][y]='*'; //标记
for(int i=-1 ; i<=1 ; i++)
for(int j=-1 ; j<=1 ; j++) //八个方向
{ //也有另外一种写法 即用数组表示b[8][2]={{-1,0},{1,0},{0,-1},{0,1}
dfs(x+i,y+j); // ,{-1,1},{-1,-1},{1,1},{1,-1}}
}
}
int main()
{
while(cin>>m>>n&&m&&n) //这个地方的输入格式用这种,不用scanf
{
int c=0;
for(i=1 ; i<=m ; ++i)
for(j=1 ; j<=n ; j++)
{
cin>>s[i][j];
}
for(i=1 ; i<=m ; ++i)
for(j=1 ; j<=n ; ++j)
{
if(s[i][j]=='@')
{
dfs(i,j);
c++;
}
}
cout<<c<<endl; // return 0 ?
} }


这个题可以作为dfs的一个模板,通过这道题自己更加理解了dfs;

DFS + BFS // 深搜 || 广搜

http://blog.csdn.net/WYK1823376647/article/details/76376736





http://blog.csdn.net/WYK1823376647/article/details/76377050





http://blog.csdn.net/wyk1823376647/article/details/52062965





http://blog.csdn.net/wyk1823376647/article/details/52200485





http://blog.csdn.net/wyk1823376647/article/details/52739349





http://blog.csdn.net/wyk1823376647/article/details/52734432





http://blog.csdn.net/wyk1823376647/article/details/69214947





http://blog.csdn.net/wyk1823376647/article/details/52200580

最新文章

  1. Hql 中 dao 层 以及daoimpl 层的代码,让mvc 模式更直观简洁
  2. 执行robot framework 的测试用例 命令行pybot使用方式
  3. #Leet Code# Unique Path(todo)
  4. mongrel
  5. HW4.18
  6. iOSシステム構成の纏め
  7. Spark Streaming 结合FlumeNG使用实例
  8. Bernese单点定位数据准备及处理
  9. Django建立helloworld自定义页面
  10. 数据库 isnull()、nvl()、ifnull() 使用
  11. js原生的轮播图
  12. 对于vxworks下硬盘驱动
  13. 使用+Leapms查看线性规划的单纯形表,itsme命令
  14. centos7安装docker并设置开机自启以及常用命令
  15. centos7查看yum安装的软件及路径
  16. 【php增删改查实例】第二十节 - 把用户管理页面集成到main.php中
  17. Linux 磁盘空间大小统计du命令常见使用方法
  18. 字体在win10下显示模糊,有锯齿
  19. python--列表内建函数的方法
  20. CODEVS 4655 序列终结者-splay(区间更新、区间翻转、区间最值)

热门文章

  1. Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError: NULL Error
  2. c++经典排序算法全集(转)
  3. was not registered for synchronization because synchronization is not active
  4. 稀疏矩阵乘法 &#183; Sparse Matrix Multiplication
  5. Gcc And MakeFile Level1
  6. 开始第一个Android应用程序
  7. android listView布局等分列
  8. tomcat运行为什么要依靠jdk
  9. java消息中间件的使用与简介
  10. 20155335俞昆《java程序设计》第6周总结