POJ 1979 深度优先搜索
题意:有红色和黑色的格子,只能走黑色的,问从起始位置出发,最多能走到达多少块黑色格子。
分析:相当于走迷宫,黑色格子是路,红色格子是墙,每次到达一个未到达过的格子时计数,原点也算是一个。每次可以走上下左右四个方向,用深度优先遍历从原点起始,一直到遍历所有能到达的格子。需要注意的是,不要重复走同一个格子,可以采取数组标记已走过的格子,但这里只需简单将已走过的格子标记为红色就可以达到目的,因为红色的格子也不可走。
C++代码:
#include <cstdio> const int MAX_W = ;
const int MAX_H = ; //输入
int W;
int H;
char maze[MAX_H][MAX_W + ]; //4个方向
const int d[][] = {{, -}, {, }, {, }, {-, }}; int dfs(int x, int y){
int ans = ;
for(int i = ; i < ; i ++){
int nx = x + d[i][], ny = y + d[i][];
if( <= nx && nx < H && <= ny && ny < W && maze[nx][ny] == '.'){
ans ++;
maze[nx][ny] = '#';
ans += dfs(nx, ny);
}
}
return ans;
} void solve(){
//找出起始位置
int sx, sy;
for(int i = ; i < H; i ++){
for(int j = ; j < W; j ++){
if(maze[i][j] == '@'){
sx = i;
sy = j;
break;
}
}
}
//深度优先遍历,每到一个新位置就计数
int ans = + dfs(sx, sy);
printf("%d\n", ans);
} int main(int argc, char const *argv[]){ while(scanf("%d %d", &W, &H)){
if(W == && H == ) break;
for(int i = ; i < H; i ++)
scanf("%s", maze[i]);
solve();
} return ;
}
POJ 1979 深度优先搜索的更多相关文章
- POJ 3009 深度优先搜索
问题:打冰球.冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失.当冰球紧贴墙时,不能将冰球往那个方向打.冰球出界就当输,超过10次还没将冰球打到目标位置也当输.求用最小次数将冰球 ...
- poj 1164 深度优先搜索模板题
#include<iostream> //用栈进行的解决: #include<cstdio> #include<algorithm> #include<cst ...
- POJ - 1321 深度优先搜索入门
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> us ...
- POJ 3009 Curling 2.0 {深度优先搜索}
原题 $On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules ...
- 深度优先搜索初尝试-DFS-LakeCounting POJ No.2386
DFS入门的一道经典题目:LakeCounting 用栈或队列来实现: #include<cstdio> #include<stdlib.h> #include<iost ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 初涉深度优先搜索--Java学习笔记(二)
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 上周学习了数组和链表,有点基础了解以后,这 ...
- 挑战程序2.1.4 穷竭搜索>>深度优先搜索
深度优先搜索DFS,从最开始状态出发,遍历一种状态到底,再回溯搜索第二种. 题目:POJ2386 思路:(⊙v⊙)嗯 和例题同理啊,从@开始,搜索到所有可以走到的地方,把那里改为一个值(@或者 ...
- 回溯 DFS 深度优先搜索[待更新]
首先申明,本文根据微博博友 @JC向北 微博日志 整理得到,本文在这转载已经受作者授权! 1.概念 回溯算法 就是 如果这个节点不满足条件 (比如说已经被访问过了),就回到上一个节点尝试别 ...
随机推荐
- Apache配置HTTPS协议搭载SSl配置全过程
1.首先要开启相应的扩展和辅助的dll(ssleay32.dll,libeay32.dll)到system32下 2.生成服务器证书 安装好在bin目录下有一个openssl.exe文件,用来生成证书 ...
- how to get file from classpath using jboss7.x.1 --reference
question: I want to convert smooks xml-java, so that i need to load source file from mobeeadmin.war/ ...
- php parse_url 函数使用方法解析
此函数返回一个关联数组,包含现有 URL 的各种组成部分.如果缺少了其中的某一个,则不会为这个组成部分创建数组项.组成部分为: scheme – 如 http host port pass path ...
- Error prompt:“wget: unable to resolve host address”---Solution
//Situation System prompts that:"wget: unable to resolve host address". //Analysis Una ...
- 关于VS2013连接远程数据库服务器的蛋疼问题
填写完用户名和密码后,点击数据库下拉菜单,接着就报错误
- QQ群开放接口
http://qun.qq.com/open.html#click http://my.oschina.net/ij2ee/blog/191692
- expected function body after function declarator
我出现这个错误是在pch中添加了一个a.h文件 然后在其他文件的b.h文件中就出现这个错误.. 后来排查出原因是: 在pch中, 这个a.h文件在b.h文件之后, 所以在b.h中使用的时候就会报错
- UEFI模式下安装Win 7系统
转载自:http://huayi898.blog.163.com/blog/static/2581351620144442319155/ 下载win7_64bit原版官方系统 1.用软碟通制作U盘启动 ...
- Android中通过Java获取Webview加载内容
有时候我们需要在加载webview时,获取加载完成的内容,当然,WebView也是有可能包含javascript.通过以下操作,我们是可以获取到WebView加载的内容. 1.自定义一个内部类,获取W ...
- Java中实现线程的方法
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 第一种:继承Thread类 new Thread(){}.start();这表示调 ...