uva572 图和图的遍历,一次AC!
来源:互联网 发布:淘宝关键词数据库 编辑:程序博客网 时间:2024/06/08 18:23
题目很简单,一次AC,思路是输入grid时就统计出共有多少个油井(‘@’),深度优先函数dfs(x,y,count)的三个参数是行号、列号和剩余的未访问油井数。主函数中从(0,0)开始遍历grid,当出现某个油井且未被访问时,油田计数器加1,接着递归调用dfs函数将与该油井相连(横、竖或对角线)的所有油井访问并标记,这些油井共同构成一块油田。主函数遍历到(m-1,n-1)时结束,所得的油田计数器即为不相连通的油田数。
在编译的时候出现了LNK1107的致命错误,重新下载了一个Kernel32.Lib替代原文件就好了。
代码如下
#include<iostream>#include<cstring>using namespace std;char grid[110][110];bool visit[110][110];int m,n,depositcount;bool over;void dfs(int x,int y,int &count){if (count==0){over=1;return;}if (x<0||x>=m||y<0||y>=n) return;if (grid[x][y]=='@'&&!visit[x][y]){visit[x][y]=1;count--;dfs(x-1,y-1,count);dfs(x-1,y,count);dfs(x-1,y+1,count);dfs(x,y-1,count);dfs(x,y+1,count);dfs(x+1,y-1,count);dfs(x+1,y,count);dfs(x+1,y+1,count);}}int main(){while (cin>>m>>n&&m&&n){int oilcount=0;over=0;memset(visit,0,sizeof(visit));for (int i=0;i<m;i++){for (int j=0;j<n;j++){cin>>grid[i][j];if (grid[i][j]=='@'){oilcount++;}}}depositcount=0;for (int i=0;i<m;i++){for (int j=0;j<n;j++){if (grid[i][j]=='@'&&!visit[i][j]){depositcount++;dfs(i,j,oilcount);if (over==1) break;}}if (over==1) break;}cout<<depositcount<<endl;}return 0;}
- uva572 图和图的遍历,一次AC!
- uva572 油田 连通块遍历
- 【BFS+边界】带图的原来也可以一次AC—POJ 1915
- ACM: 图论题 poj 1789 (一次AC的水…
- uva572
- UVA572
- uva572
- UVA572
- uva572
- uva572
- uva572
- uva572
- UVa572
- 图的深度遍历和广度遍历
- 图的广度遍历和深度遍历
- 图的深度遍历和广度遍历
- 图的dfs遍历和bfs遍历
- 图的深度遍历和广度遍历
- Google地图Url参数使用说明,如何使用Intent跳转
- 从真实案例出发:如何在协作开发中避免误解!
- jQuery给控件赋值
- 搭建proFTPD的一些心得
- android.graphics.Typeface
- uva572 图和图的遍历,一次AC!
- Android PowerImageView实现,可以播放动画的强大ImageView
- 用explicit禁止默认转换
- POJ 1458 Common Subsequence
- https学习总结
- iOS 7中设置barTintColor实现类似网易和 Facebook 的 navigationBar 效果
- Java获取URL对应的资源
- Google工程师谈程序员的自我修养
- 一分钟打造设计师手绘图