HDU1241 Oil Deposits
2016-01-31 14:38
232 查看
原题地址: http://acm.hdu.edu.cn/showproblem.php?pid=1241
题目大意:给一块油田,有油的是@,没油的是*,油田可以通过上下左右和对角线相连,问一共有几块连通的油田。
由于数据很少(100*100)所以可深搜可广搜,以下是广搜的做法:
从头开始遍历全图,每碰到一个没有标记过的油田就开始广搜,把搜过的都记上标记,然后油田总数加1。。
题目大意:给一块油田,有油的是@,没油的是*,油田可以通过上下左右和对角线相连,问一共有几块连通的油田。
由于数据很少(100*100)所以可深搜可广搜,以下是广搜的做法:
从头开始遍历全图,每碰到一个没有标记过的油田就开始广搜,把搜过的都记上标记,然后油田总数加1。。
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; char maze[105][105]; int vis[105][105]; int dx[8]={0,1,0,-1,1,-1,1,-1};//上下左右和四个对角线方向 int dy[8]={1,0,-1,0,1,-1,-1,1}; struct node{ int x,y;//每个点的坐标 }; int main() { int n,m; while(cin>>n>>m) { getchar(); if(n==0&&m==0) break; queue<node> q; memset(vis,0,sizeof(vis)); memset(maze,0,sizeof(maze)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%c",&maze[i][j]); } getchar(); } int sum=0; node buf,next; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(maze[i][j]=='@'&&vis[i][j]==0)//广搜 { buf.x=i;buf.y=j; vis[i][j]=1; sum++; q.push(buf); while(!q.empty()) { buf=q.front(); q.pop(); for(int k=0;k<8;k++) { int x1=buf.x+dx[k]; int y1=buf.y+dy[k]; if(x1<1||x1>n||y1<1||y1>m) continue; if(maze[x1][y1]=='*'||vis[x1][y1]) continue; if(maze[x1][y1]=='@') { next.x=x1;next.y=y1; vis[x1][y1]=1; q.push(next); } } } } } } cout<<sum<<endl; } }
相关文章推荐
- Android Drawable
- HDU 1517:A Multiplication Game
- 解决登录WDCP面板出现"无法连接mysql,请检查mysql是否已启动"问题
- 通过进程名获取该进程所占CPU百分比
- Android应用程序资源的编译和打包过程分析
- C/C++中,优先级的那些事儿
- JavaSE入门学习20:Java面向对象之接口(interface)(一)
- java垃圾回收机制详解
- java dyn proxy
- Hybird App——cordova(原PhoneGap)安装配置
- Hybird App——cordova(原PhoneGap)安装配置
- android *** Layout 01
- hdu 2544最短路(Dijkstra)
- 使用CoordinatorLayout
- LeetCode Best Time to Buy and Sell Stock II C 4ms
- OkHttp网络连接封装工具类
- USACO milk6 最小割
- 王学岗Fragment(五)
- Ubuntu 14.04 安装KVM,配置桥接
- 基于直方图的图像增强算法(HE、CLAHE、Retinex)之(一)