HDU1241 Oil Deposits (L)
来源:互联网 发布:交朋友软件 编辑:程序博客网 时间:2024/06/10 21:27
题意:给以个n*m的矩阵 ‘@’代表有矿 ‘*’代表没矿 @之间彼此连接在一起的算作是一处矿(包括水平 竖直 斜对角接触) 输出共有多少出矿藏
思路: 从第一个位置开始枚举 如果遇到@ 个数就加一 并且将它周围的@设置为已经访问过 同时对周围的@的周围进行探索 直到没有为止 重复上述操作 直到所有格子都已经被枚举完为止
其中要加k用于区分 是不是这堆矿中第一个矿点 防止重复计算
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#include<vector>using namespace std;#define maxn 150int n,m;char maps[maxn][maxn];bool vis[maxn][maxn];int ans;int go[8][2]={{1,0},{-1,0},{0,-1},{0,1},{1,1},{1,-1},{-1,1},{-1,-1}};//总共8个方向void bfs(int x,int y,int k)//k用于区分 是不是这堆矿中第一个矿点 防止重复计算{if(k==0)//除了第一次 其他都不用计算 算同一处矿ans++;vis[x][y]=true;for(int s=0;s<8;s++){int fx=x+go[s][0];int fy=y+go[s][1];if(fx>=0&&fx<n&&fy>=0&&fy<m&&!vis[fx][fy]&&maps[fx][fy]=='@'){bfs(fx,fy,1);}}}int main(){while(~scanf("%d%d",&n,&m)){if(m==0&&n==0)break;for(int i=0;i<n;i++)scanf("%s",maps[i]);memset(vis,0,sizeof vis);ans=0;for(int i=0;i<n;i++)//枚举矿点{for(int j=0;j<m;j++){if(maps[i][j]=='@'&&!vis[i][j]){bfs(i,j,0);}}}printf("%d\n",ans);} return 0;}
阅读全文
0 0
- HDU1241 Oil Deposits (L)
- hdu1241(Oil Deposits)
- hdu1241(Oil Deposits)
- hdu1241 Oil Deposits(搜索)
- HDU1241 Oil Deposits(DFS)
- HDU1241 - Oil Deposits (深搜)
- hdu1241 Oil Deposits(dfs)
- hdu1241——Oil Deposits(DFS)
- HDU1241 Oil Deposits(dfs or bfs)
- Oil Deposits hdu1241 dfs
- hdu1241 Oil Deposits
- HDU1241:Oil Deposits
- HDU1241:Oil Deposits(DFS)
- HDU1241 Oil Deposits
- hdu1241(DFS Oil Deposits )
- HDU1241 Oil Deposits
- HDU1241-Oil Deposits
- HDU1241:Oil Deposits(DFS)
- 简单的经济分析模型
- 7.5--Hibernate学习之反向生成
- 二叉树(3)
- 华为——提取不重复的整数
- maven安装与使用
- HDU1241 Oil Deposits (L)
- android :intent.hasExtra的含义
- 第十一章 表示与描述(11.1-11.2)
- 水仙花数
- 刚开始学java第一天
- 常用的DOS命令
- NDK编译——概念
- linux下screen命令使用记录
- java代码操作redis: