hdu 1241 Oil Deposits_dfs or bfs
题意:给你n*m的图,@代表有油田的格子,*代表没油田的格子,如果油田旁边有油田就合并一起成为一个油田区,合并的方向为8个,现在问你油田合并过后,有多少个油田区
解法:用dfs or bfs
dfs:
#include<iostream>
using namespace std;
char map[102][102];
int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
void dfs(int x,int y)
{
int i,x1,y1;
if(map[x][y]=='@')
{
map[x][y]='*';
for(i=0;i<8;i++)
{
x1=x+dir[i][0];
y1=y+dir[i][1];
dfs(x1,y1);
}
}
} int main()
{
int n,m,i,j,ans;
while(cin>>n>>m,n||m)
{
ans=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>map[i][j];
getchar();
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]=='@')
{
dfs(i,j);
ans++;
}
}
}
cout<<ans<<endl;
}
return 0;
}
bfs:
#include<iostream>
#include<queue>
using namespace std;
int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,-1},{-1,1},{-1,-1},{1,1}};
char map[102][102];
int n,m,ans;
struct node
{
int x;
int y;
}begin,end;
int bfs()
{
queue<node>q;
node temp,t;
int i,ans=0;
q.push(begin);
while(!q.empty())
{
t=q.front();
q.pop();
for(i=0;i<8;i++)
{
temp.x=t.x+dir[i][0];
temp.y=t.y+dir[i][1];
if(map[temp.x][temp.y]!='*'&&temp.x>=0&&temp.x<n&&temp.y>=0&&temp.y<m)
{ q.push(temp);
map[temp.x][temp.y]='*';
}
}
}
return 0;
} int main()
{
int i,j;
while(cin>>n>>m,n||m)
{
ans=0;
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<m;j++)
{
cin>>map[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]=='@')
{
begin.x=i;
begin.y=j;
map[i][j]='*';
bfs();
ans++;
}
}
}
cout<<ans<<endl; }
return 0;
}
hdu 1241 Oil Deposits_dfs or bfs的更多相关文章
- HDU 1241 Oil Deposits (DFS/BFS)
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- HDU 1241 Oil Deposits(石油储藏)
HDU 1241 Oil Deposits(石油储藏) 00 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Probl ...
- HDU 1241 Oil Deposits --- 入门DFS
HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...
- hdu 1241 Oil Deposits(DFS求连通块)
HDU 1241 Oil Deposits L -DFS Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & ...
- HDOJ(HDU).1241 Oil Deposits(DFS)
HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
- DFS(连通块) HDU 1241 Oil Deposits
题目传送门 /* DFS:油田问题,一道经典的DFS求连通块.当初的难题,现在看上去不过如此啊 */ /************************************************ ...
- HDU 1241 - Oil Deposits - [BFS]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 题意: 求某块平面上,连通块的数量.一个油田格子若周围八个方向也有一个油田格子,则认为两者相连通 ...
- HDU 1241 Oil Deposits bfs 难度:0
http://acm.hdu.edu.cn/showproblem.php?pid=1241 对每个还未访问的点bfs,到达的点都标为一块,最后统计有多少块即可 #include <cstdio ...
- HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
随机推荐
- Linux删除乱码文件或者目录
Linux删除乱码文件或者目录 有时在Linux下面解压一些zip或者rar文件后会产生乱码文件或者目录,这个时候使用rm不能成功删除,需要使用一些特别的方法 来进行删除,下面是我经常使用的两种方法. ...
- Best Time to Buy and Sell Stock I II III
Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a gi ...
- fullcalender
http://blog.csdn.net/francislaw/article/details/7740630 引用 <link rel="stylesheet" href= ...
- Redux中的重要概念
Action/Reducer/Store 首先,先看看第一张图,图中展示了Redux的单向数据流,以及Action.Reducer和Store这三个核心概念. 下面就围绕上图,非别介绍Action.R ...
- indesign 注意事项
画册 42 * 28.5加出血 42.6 * 29.1用纸 889 * 1194 注意事项:indd文件打印需转曲线 快捷键:ctrl+shift+O ctrl+shift+G (2)应用图片需单独创 ...
- Oracle Enterprise linux 7 安装Oracle11gR2
一.修改主机名和IP地址: [root@localhost Desktop]# cat /etc/hosts127.0.0.1 localhost.localdomain localhost 192. ...
- 读取本地文件理解FileReader对象的方法和事件以及上传按钮的美化。
一.FileReader对象 用来把文件读入内存,并且读取文件中的数据.FileReader对象提供了异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据. 浏览器支持情况, ...
- .NET c# 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- php.ini配置
PHP作为一门强大的脚本语言被越来越多的web应用程序采用,不规范的php安全配置可能会带来敏感信息泄漏.SQL注射.远程包含等问题,规范的安全配置可保障最基本的安全环境.下面我们分析几个会引发安全问 ...
- Uva 10652 Board Wrapping(计算几何之凸包+点旋转)
题目大意:给出平面上许多矩形的中心点和倾斜角度,计算这些矩形面积占这个矩形点形成的最大凸包的面积比. 算法:GRAHAM,ANDREW. 题目非常的简单,就是裸的凸包 + 点旋转.这题自己不会的地方就 ...