dfs油田
来源:互联网 发布:uygurqa mp3 下载软件 编辑:程序博客网 时间:2024/05/17 07:08
输入可能有多个矩形区域(即可能有多组测试)。每个矩形区域的起始行包含m和n,表示行和列的数量,1<=n,m<=100,如果m =0表示输入的结束,接下来是n行,每行m个字符。每个字符对应一个小方格,并且要么是'*',代表没有油,要么是'@',表示有油
对于每一个矩形区域,输出油藏的数量。两个小方格是相邻的,当且仅当他们水平或者垂直或者对角线相邻(即8个方向)。
#include<cstdio>#include<iostream>#include<cstring>#define max 100+5水平或者垂直或者对角线相邻(即8个方向)using namespace std;int n,m,idx[max][max];char a[max][max];void dfs(int r,int c,int id){ if(r<0||r>=n||c<0||c>=m)//判断是否在油田内 return; if(idx[r][c]>0||a[r][c]!='@')//判断是否被访问过或是否为油田 return; idx[r][c]=id;//将被访问过的油田做上标记 for(int dr=-1;dr<=1;dr++)//检查该点水平或者垂直或者对角线相邻(即8个方向)有无油田并做上标记for(int dc=-1;dc<=1;dc++)if(dr!=0||dc!=0)//本身不需要检查 dfs(r+dr,c+dc,id);//持续调用,当无油田时返回,最终将相连的一块做上标记,并返回,sum++;}int main(){ while(cin>>n>>m) { if(n==0||m==0) break; else { int sum=0; memset(idx,0,sizeof(idx)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(idx[i][j]==0&&a[i][j]=='@') dfs(i,j,++sum); cout<<sum<<endl; } }}
0 0
- dfs油田
- dfs油田
- HDU1241 油田合并(DFS)
- 实现DFS之“油田”
- 实现DFS之“油田”
- 油田数量DFS
- 油田问题(dfs)
- uva572(DFS 油田)
- 油田合并(dfs实现)
- dfs 著名的油田分块的问题
- ZOJ 1709 Oil Deposits(油田问题DFS)
- ZOJ1709/POJ1562 油田问题/搜索/DFS
- 经典DFS--找油田---POJ 1562
- 【HDU-1241】Oil Deposits油田(dfs)
- UVA-6.4.1-油田-572-DFS
- Vjudge Oil Deposits 油田问题(dfs)
- uva 572 Oil Deposits(油田)—— DFS
- 【HDU 1198】Farm Irrigation(字符串拼接/类油田问题/DFS)
- 欢迎使用CSDN-markdown编辑器
- What is the firewall?
- EXE4J 使用教程
- 游戏数据分析的艺术——互动出版网
- springmvc上传图片的处理2
- dfs油田
- C# 控件的Tag属性
- IPTABLES入门
- 自定义button(标题+ 图片)
- Maven 安装、Eclipse创建项目过程演示
- leetcode单链表总结
- 导入 Android v4 包看不到源码的解决办法
- [转]如何测试网页的登录页面
- 动态加载APK原理分享