POJ 1979 Red and Black
2016-04-28 16:44
246 查看
题意:
输入一个字符矩阵,其中,‘#’代表不能走的地方,‘.’代表可以走的地方,‘@’代表起点。问从起点开始,最多可以走多少格子。
思路:
直接DFS,深度优先搜索。每走过一个格子,计数器加1。
代码如下:
输入一个字符矩阵,其中,‘#’代表不能走的地方,‘.’代表可以走的地方,‘@’代表起点。问从起点开始,最多可以走多少格子。
思路:
直接DFS,深度优先搜索。每走过一个格子,计数器加1。
代码如下:
#include <iostream> using namespace std; #define MAXNUM 25 int counter = 0; char data[MAXNUM][MAXNUM]; int visit[MAXNUM][MAXNUM]; int dir[4][2] = {{0,-1},{1,0},{0,1},{-1,0}}; void DFS(int row,int col,int m, int n); int main() { int m = 0; int n = 0; int bx = 0; int by = 0; while(true) { cin>>n>>m; if(m == 0 && n == 0) { break; } counter = 0; memset(visit,0,sizeof(visit)); memset(data,0,sizeof(data)); for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { cin>>data[i][j]; if(data[i][j] == '@') { bx = i; by = j; } } } visit[bx][by] = 1; counter++; DFS(bx,by,m,n); cout<<counter<<endl; } return 0; } void DFS(int row,int col,int m, int n) { //深度优先搜索 int r = 0; int c = 0; for(int i = 0; i < 4; i++) //四个方向 { r = row + dir[i][0]; c = col + dir[i][1]; if(r >= 0 && r < m && c >= 0 && c < n //未越界 && data[r][c] != '#' //不是墙 && visit[r][c] == 0) //没走过 { counter++; visit[r][c] = 1; DFS(r,c,m,n); } } }
相关文章推荐
- win7 debugview 打印内核信息
- 对openwrt系统中QoS基本概念
- 深入浅出学Spring Data JPA
- 使用powershell批量添加Keil和IAR的头文件路径
- 在正式提交测试前的代码检查
- Maven打包中出现[INFO] pamirs-1.0.0/lib/pamirs-area-1.0.1.jar already added, skipping
- Nodejs基于Express4的动态页面静态化
- 二进制
- Window程序的结构--学习笔记
- Metal 着色语言编程指南 十四
- Linq 左联接 右联接示例
- AngularJS中插入HTML片段
- 开启文件管理时 URI获取文件路径为null的解决方法
- 8.2016 物电学院 电气工程及其自动化 辛雅松 15050341033
- Java 8怎么了:局部套用vs闭包
- 面试题10
- iOS实现压缩图片上传功能
- HDFS基本的读写文件
- linux大文件分包压缩和批量解压命令tar
- 13、Servlet入门