1011 Oil Deposits
来源:互联网 发布:校园网用户mac地址错误 编辑:程序博客网 时间:2024/06/01 15:54
1011 Oil Deposits
题意:一个m*n的地图,其中要么是*,要么是@,对于@代表油田,横、竖、斜连着的成为一个块,问总共有多油田。
思路:深搜,逐点搜索,对于不满足题意的点,返回上一层,继续搜索,直至所有点搜索完成。
#include<iostream>
#include<cstring>
using namespace std;
bool visit[111][111];
char map[111][111];
intdir[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}};
int sum,m,n,x,y;
bool isbound(int a,int b){
if(a<1||a>m||b<1||b>n) returntrue;
return false;
}
void dfs(int x,int y){
for(int i=0;i<8;i++){
if(map[x+dir[i][0]][y+dir[i][1]]=='*')continue;
if(isbound(x+dir[i][0],y+dir[i][1]))continue;
if(visit[x+dir[i][0]][y+dir[i][1]])continue;
visit[x+dir[i][0]][y+dir[i][1]]=1;
dfs(x+dir[i][0],y+dir[i][1]);
}
}
int main(){
while(cin>>m>>n){
if(m==0) break;
memset(visit,0,sizeof(visit));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
cin>>map[i][j];
}
sum=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
if(map[i][j]=='@'&&!visit[i][j]){
visit[i][j]=1;
dfs(i,j);
sum++;
}
}
cout<<sum<<endl;
}
return 0;
}
- 1011 Oil Deposits
- 1011 Oil Deposits
- 1011 Oil Deposits
- 1011-Oil Deposits
- acm 2 1011 Oil Deposits
- 练习二 1011 Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- Oil Deposits
- 关于Android蓝牙设备的连接使用
- 淘气堡设备如何选择
- redis配置文件redis.conf中文版(基于2.4)
- Spark资源调度中的通信流程
- C++作业4
- 1011 Oil Deposits
- 同步等待异步模型
- 禅道系统附件上传限制修改
- ios 富文本
- 1013
- 解决Android SDK Manager 无法更新列表的问题
- 随机数 随机丢包
- 设计模式-装饰者模式(Decorator)理解和在Android中的应用
- 毕业后去大城市OR回小城市