HDU 1312 Red and Black
来源:互联网 发布:win7 upnp nat端口失败 编辑:程序博客网 时间:2024/06/01 09:05
原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1312
题目大意:
输入W和H表示有W列。H行。输入一个W * H的图。其中’#’表示此位置不能走,’.’表示此位置可以走。‘@’表示此处为起点。问最多可以走多少个‘.’
思路:
从记录的起点坐标开始,逐个遍历每个点。如果新的点满足条件就把值加一。不满足就继续搜索其他位置的点。
代码如下:
#include <iostream>#include <cstdio>char tile[25][25]; //用于存放图using namespace std;void begin( int a, int b, int x, int y, int& max ){ // 四个方向的移动 int Xz[4]={-1,0,1,0}; int Yz[4]={0,1,0,-1}; int k,new_x,new_y; for( k = 0; k < 4; k++) { new_x = x + Xz[k]; new_y = y + Yz[k]; //越界判定 if( new_x < 0 || new_x >= a || new_y < 0 || new_y >= b ) continue; if( tile[new_x][new_y] == '#') continue; if( tile[new_x][new_y] == '.' ) { max++; tile[new_x][new_y] = '#'; begin(a,b,new_x,new_y,max); } }}int main(){ while(1) { int a,b; cin>>b>>a; if( a == 0 && b == 0 ) break; int x,y,i,j; for( i = 0; i < a ; i++ ) for( j = 0; j < b; j++) { cin>>tile[i][j]; //记录起点坐标 if( tile[i][j] == '@' ) { x = i; y = j; } } int max; max = 1; begin( a,b,x,y,max ); cout<<max<<endl; } return 0;}
0 0
- Red and Black hdu 1312
- HDU 1312 Red and Black
- HDU 1312 Red and Black
- hdu 1312 Red and Black
- Hdu 1312 - Red and Black
- hdu-1312-Red and Black
- hdu 1312Red and Black
- hdu 1312 Red and Black
- hdu - 1312 - Red and Black
- hdu 1312 Red and Black
- hdu 1312 Red and Black
- HDU-1312(red and black)
- HDU 1312 Red and Black
- hdu 1312 Red and Black
- HDU 1312 Red and Black
- hdu 1312 Red and Black
- hdu 1312 Red and Black
- hdu 1312 Red and Black
- Struts2基础---struts.xml配置
- SSH框架中 分页显示数据Demo
- 智能指针unique_ptr
- 对象容器、对象数组、集合容器(输出改进)
- Linux编程基础——GDB(设置断点)
- HDU 1312 Red and Black
- js简易选项卡
- Android中显示gif图
- Delphi单元文件Unit详解
- 动态规划
- HDU 1231(最大连续子序列)动态规划-最大连续子序列和
- atitit.md5算法的原理 与 总结
- jimu Mirror,加速你的 Android UI 开发
- 基于mean-shift的简单目标跟踪