11Oil Deposits
来源:互联网 发布:jdk1.7源码下载 官方 编辑:程序博客网 时间:2024/04/29 16:21
简单题意
给出一个地图,其中要么是*要么是@,对于@,横、竖、斜连着的成为一个块,问总共有多个@块
解题思路形成过程
深度优先搜索,首先找到第一个@并以他为起点深搜,直到不能搜索为止,为一个块,之后在找到下一个@,在进行深搜,直到整个地图搜索完,为了避免重复,设置一个标记地图,对进行搜索过的点进行标记。
感想
老师上课讲的思路很清楚,不过自己写出来,总有些地方考虑不周
AC代码
#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
int m,n;
bool visit[110][110];
char map[110][110];
int dir[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}};
bool isbound(int a,int b){
if(a<1||a>m||b<1||b>n)return true;
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()
{
ifstream cin("in.txt");
while(cin>>m>>n&&m&&n){
memset(visit,0,sizeof(visit));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>map[i][j];
}
}
int 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;
}
- 11Oil 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
- Oil Deposits
- Oil Deposits
- Oil Deposits
- oil deposits
- Oil Deposits
- 申请SSL证书怎样验证域名所有权
- hadoop配置ssh登陆
- Java学习·静态代码块
- Android APK反编译详解
- 50个经典Sql语句
- 11Oil Deposits
- Linux压缩保留源文件的方法
- Java的断言
- FileReader用法
- 基于SSH编写通用的DAO、Service、Action
- Linux下C编程实现---获取本机IP地址
- 2016.04.01-2016.04.04回顾
- cocoaPods的安装和使用
- 常用开发工具