POJ 1979 red and black
2015-08-17 17:37
253 查看
POJ 1979 red and black
思路:从起点开始向四个方向进行深度优先搜索,搜索过的点置为#(避免重复搜索)。
对于字符地图的输入来说,在大多数情况下用cin输入较scanf更为简便。
思路:从起点开始向四个方向进行深度优先搜索,搜索过的点置为#(避免重复搜索)。
对于字符地图的输入来说,在大多数情况下用cin输入较scanf更为简便。
#include<iostream> using namespace std; #define MAX_W 20 #define MAX_H 20 char room[MAX_W][MAX_H]; int W, H; //四方向数组的设置 const int direction[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1},}; int step = 0; int dfs(const int& x, const int& y) { //将走过的点设置为#,不会出现重复搜索的情况 room[x][y] = '#'; ++step; for (int i = 0; i < 4; ++i) { int nx = x + direction[i][0]; int ny = y + direction[i][1]; if (nx >= 0 && nx < W && ny >= 0 && ny < H && room[nx][ny] == '.') { dfs(nx, ny); } } return step; } ///////////////////////////SubMain////////////////////////////////// int main() { //输入两数据且在都不为0时一直循环的书写方法 while (cin >> W >> H, W > 0) { step = 0; //这样定义变量对for循环的书写有一定简化。若初始化为0,还可省略for中的第一部分 int x, y; //用二维数组[][]的角标方式表示 x.y ,注意输入时用嵌套for循环次序为:外y内x。 //此后都用x,y的次序。(循环和角标都是x,y哦) for (y = 0; y < H; ++y) { for (x = 0; x < W; ++x) { //关于数组字符的输入采用C++中的cin更为简便 cin >> room[x][y]; } } //用bool作为判断标记能有效避免计算机不必要的运算,头文件为iostream bool found = false; for (x = 0; x < W; ++x) { for (y = 0; y < H; ++y) { if (room[x][y] == '@') { found = true; break; } } if (found) { break; } } cout << dfs(x, y) << endl; } return 0; }
相关文章推荐
- 基于jquery实现放大镜效果
- Android如何自定义视图之测量和布局原理(一)
- eclipse名字的由来及各版本的命名
- redhat下svn+apache搭建
- 一维邮局问题 + 带权中位数复杂度O(n)算法
- POJ 1985--Cow Marathon【树的直径 && 模板】
- 沟通中的情绪管理(演讲稿)
- 字符串匹配——KMP算法
- 解决Bui框架下拉框select配合Gird弹出模态编辑框使用,无法选取编辑行的下拉内容.
- MFC保存和读取文件时默认添加一个文件扩展名
- 项目开发注意事项
- Ubuntu系统redis安装部署入门
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Javascript中bind()方法的使用与实现
- Memcached 客户端程序三种API的比较
- Hduoj1258【搜索】
- VS2010开发程序打包部署详解
- 提示牌(提示后-自动消失)------------ jquery.gritter
- 杭电 2544 最短路(dijkstra&&spfa)
- CSS3学习笔记(2)-CSS盒子模型