http://poj.org/problem?id=3009

(1)这是一个用球撞石头的游戏,撞到石头,石碎球停。在规定的10次抛球机会下,若求移动到终点就赢,否则算输了(出界直接算输)。

(2)每一次的深搜都有四个方向,每个方向要一直走,直到出现以下状况为止:

    1)刚要抛球,被墙挡住了(该情况不能抛球);

    2)  出界;

    3)到达终点;

    4) 撞墙。

    其中只有第四种情况需要进行深搜,其他情况均不需要。(虽然这很显然,但是案例

    通不过的基本上就是因为这个,千万小心)。

(3)通过了所有案例,为什么还是WA??小心,注意输入 n,m 顺序问题。题中所给的案例

   恰好与n,m 的顺序无关。。。这是挖好了陷阱等你呢。

(4)稍微注意: if(!n&&!m) break;

总的来说,这是一道不错的dfs入门题。

具体代码:

View Code

#include<stdio.h>
#include<string.h>
#define Inf (1<<28)
int n, m;
int map[25][25];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
int px, py, ans;
int dfs(int x, int y, int depth)
{int i, j, k;if(depth>10) return 0;for(i=0;i<4;i++){int tx=x, ty=y, ex, ey;int g=0;for(j=0;;j=1){ex=tx+dir[i][0];ey=ty+dir[i][1];if(!j&&map[ex][ey]==1) break;   //靠墙,不能投if(ex<=0||ex>n||ey<=0|ey>m)  break;  //出界if(map[ex][ey]==3)   //终点
            {if(ans>depth) ans=depth;return 0;}if(map[ex][ey]==1) {g=1; break;}//撞墙tx=ex; ty=ey;//球还在滚动中
        }if(g){map[ex][ey]=0;dfs(tx, ty, depth+1);  //下一步,只有撞墙的才算一步map[ex][ey]=1;}}return 0;
}
int main()
{int i, j, k;while(scanf("%d%d", &m, &n)!=EOF, n||m)  //注意 n, m 的顺序
    {for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%d", &map[i][j]);if(map[i][j]==2) {px=i;py=j;}}ans=Inf;dfs(px, py, 1);if(ans!=Inf) printf("%d\n", ans);else printf("-1\n");}return 0;
}

转载于:https://www.cnblogs.com/tim11/archive/2012/08/18/2645715.html

poj 3009 Curling 2.0 (dfs的应用)相关推荐

  1. POJ 3009 Curling 2.0(深度优先搜索+剪枝)

    POJ 3009  Curling 2.0 题目大意: 在一块光滑的h*w的矩形平面上,有若干个障碍物,用1表示以及空格用0表示.现在有一个小球在平面上的数字2的地方,通过抛掷这个小球,使其达到数字3 ...

  2. POJ 3009 Curling 2.0(简单DFS)

    题意: 每一次碰到障碍则在障碍的旁边停下来,并且障碍被击碎.此时可以重新值掷一次冰球.当掷球次数超过 10 次则输出 -1. 思路: 1. 超过 10 次输出 -1 这个剪枝很关键: 2. 主要是要注 ...

  3. POJ 3009 Curling 2.0 {深度优先搜索}

    原题 $On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules ...

  4. poj 3009 Curling 2.0

    题目链接:点击打开链接 Description On Planet MM-21, after their Olympic games this year, curling is getting pop ...

  5. POJ 3009 Curling 2.0-DFS

    Curling 2.0 题意 就像最强大脑里的一个游戏,从当前位置移动,撞到障碍物后才会停止(所以有可能会冲出地图姐界面),障碍物被撞后会消失,求到达终点的最短路径. 但不同的是,如果路径上可以通过终 ...

  6. Curling 2.0 - POJ 3009

    参考的这个 思路: 枚举冰球下一个可能所在的所有位置然后DFS. 改了一天的BUG,结果发现这个的长宽是反过来输入的,裂开. #include <iostream> #include &l ...

  7. POJ Curling 2.0

    题目 题目真的长,还有很多细节. #include <iostream> #include <string> using namespace std;struct Coordi ...

  8. POJ3009 Curling 2.0

    原题链接:http://poj.org/problem?id=3009 暴力DFS + 回溯.注意行和列不要搞反,并且当搜索深度大于10的时候直接返回. View Code 1 #include &l ...

  9. POJ 2676/2918 数独(dfs)

    思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...

最新文章

  1. mysql中FIND_IN_SET的使用方法
  2. Oracle事务的隔离
  3. Android播放器自定义,android surfaceView+mediaPlayer 自定义视频播放器
  4. boost::spirit模块实现演示逗号分隔的数字列表的解析器的测试程序
  5. layui表格弹窗修改_layUI 实现自定义弹窗
  6. Leecode15. 三数之和——Leecode大厂热题100道系列
  7. 如何通过httpd和DVD ISO在RHEL上配置yum本地源
  8. Python实现快速的风格迁移
  9. 利用自定义web-font实现数据防采集
  10. Hadoop4——HA集群的搭建(高可用)
  11. (八)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  12. java中double类型显示两个小数,比如12.00
  13. 第41天:匀速、缓动运动和图片无缝滚动
  14. Python单元测试框架——unittest
  15. iOS 审核被拒绝问题汇总
  16. LMS自适应滤波的MATLAB实现——实例仿真
  17. Bilibili缓存视频在电脑端直接打开方式
  18. 职业资格计算机操作员,职业资格 计算机操作员
  19. OllyDBG V1.10聆风听雨汉化版
  20. win10以太网没有有效的ip配置

热门文章

  1. VMware下Centos7快速搭建vsftpd
  2. Django 2.0 学习(20):Django 中间件详解
  3. MongoDB的基本shell操作(三)
  4. 状态开关按钮(ToggleButton)及按钮(Swich)的使用
  5. 计算机专硕专业课单科分数线,计算机考研|这两所自划线,单科没过线也能复试?...
  6. mysql gui vim_vim(一): 小技巧
  7. 阿里云服务器发送邮件失败?连接超时?25端口被封?
  8. RabbitMQ六种队列模式-简单队列模式
  9. Android 微信分享
  10. Java 的Tuple(类似.net等的元组)