C
来源:互联网 发布:淘宝源 编辑:程序博客网 时间:2024/06/05 05:27
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.
1 1*3 5*@*@***@***@*@*1 8@@****@*5 5 ****@*@@*@*@**@@@@*@@@**@0 0
0122
题意:问有几个“@”的联通块。。。。
思路:dfs直接搜索好了。。。当找到一个“@”符号时,直接以他为原点向周围8个方向搜索,如果还有的话再以新找到的“@”为原点找,当找不到时就返回回溯,再重新找一个“@”继续搜索就好了;用一个变量记录次数。。。
下面附上代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int sx,sy,nx,ny,ans,m,n;char mapp[105][105];int mx[8]={0,0,1,-1,1,-1,1,-1};int my[8]={1,-1,0,0,1,-1,-1,1};int vis[205][205];bool check(int x,int y){if(x<0||y<0||x>=n||y>=m||vis[x][y])return false;return true;}void dfs(int x,int y){vis[x][y]=1;for(int i=0;i<8;i++){nx=x+mx[i];ny=y+my[i];if(!check(nx,ny))continue;else if(mapp[nx][ny]=='@')dfs(nx,ny);}}int main(){while(~scanf("%d %d",&n,&m)&&(n||m)){ans=0;memset(vis,0,sizeof(vis));for(int i=0;i<n;i++)scanf("%s",mapp[i]);for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(mapp[i][j]=='@'&&!vis[i][j]){ans++;dfs(i,j);}}}printf("%d\n",ans);}return 0;}
阅读全文
0 0
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- c
- C
- C
- c
- C
- 测试
- 关于转换编码问题
- Spring boot整合Jersey
- HDU 4745-Two Rabbits(最长非连续回文串,区间DP)
- 滚动 导航栏 吸顶 固定
- C
- 课堂笔记: 配置zookeeper(zk)并创建第一个hadoop项目
- Google VR开发-Cardboard VR SDK头部追踪实现(卡尔曼滤波)
- JS异步编程
- 编写自己的代码库(javascript常用实例的实现与封装)
- hdu 1595 find the longest of the shortest
- VS2017 ReferenceManagerPackage的解决
- 仿网易云音乐图片保存
- JS和OC进行交互的总结