题目来源:http://poj.org/problem?id=3009

一道深搜题目,与一般搜索不同的是,目标得一直往一个方向走,直到出界或者遇到阻碍才换方向。

 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cstdlib>
5 #include<cmath>
6 #include<algorithm>
7 #include<queue>
8 #define inf 0x7fffffff
9 using namespace std;
10 int w,h;
11 int an[4][2]={-1,0, 1,0 ,0,-1, 0,1 };
12 int bn[25][25],vis[25][25];
13 int sx,sy,gx,gy;
14 int ans;
15 void dfs(int x,int y,int time)
16 {
17 if (time>=10) return ;
18 if (x<0 || x>=h || y<0 || y>=w) return ;
19 int ok=0;
20 int j=x,k=y;
21 int i;
22 for (i=j-1 ;i>=0 ;i--)
23 {
24 if (bn[i][k]==1) break;
25 if (bn[i][k]==3) {ans=min(ans,time+1) ;return ; }
26 }
27 if (i>=0 && i+1!=x)
28 {
29 bn[i][k]=0;
30 dfs(i+1,k,time+1);
31 bn[i][k]=1;
32 }
33 j=x ;k=y ;
34 for (i=j+1 ;i<h ;i++)
35 {
36 if (bn[i][k]==1) break;
37 if (bn[i][k]==3) {ans=min(ans,time+1) ;return ; }
38 }
39 if (i<h && i-1!=x)
40 {
41 bn[i][k]=0;
42 dfs(i-1,k,time+1);
43 bn[i][k]=1;
44 }
45 j=x ;k=y ;
46 for (i=y-1 ;i>=0 ;i--)
47 {
48 if (bn[j][i]==1) break;
49 if (bn[j][i]==3) {ans=min(ans,time+1) ;return ; }
50 }
51 if (i>=0 && i+1!=y)
52 {
53 bn[j][i]=0;
54 dfs(j,i+1,time+1);
55 bn[j][i]=1;
56 }
57 j=x ;k=y ;
58 for (i=y+1 ;i<w ;i++)
59 {
60 if (bn[j][i]==1) break;
61 if (bn[j][i]==3) {ans=min(ans,time+1) ;return ; }
62 }
63 if (i<w && i-1!=y)
64 {
65 bn[j][i]=0 ;
66 dfs(j,i-1,time+1);
67 bn[j][i]=1;
68 }
69 }
70 int main()
71 {
72 while (cin>>w>>h)
73 {
74 if (!w && !h) break;
75 for (int i=0 ;i<h ;i++)
76 {
77 for (int j=0 ;j<w ;j++)
78 {
79 scanf("%d",&bn[i][j]);
80 if (bn[i][j]==2) {sx=i ;sy=j ; }
81 if (bn[i][j]==3) {gx=i ;gy=j ; }
82 }
83 }
84 int ok=1;
85 if (sx>0 && bn[sx-1][sy]!=1) ok=0;
86 if (sx<h-1 && bn[sx+1][sy]!=1) ok=0;
87 if (sy>0 && bn[sx][sy-1]!=1) ok=0;
88 if (sy<w-1 && bn[sx][sy+1]!=1) ok=0;
89 if (ok) {cout<<-1<<endl;continue; }
90 memset(vis,0,sizeof(vis));
91 ans=inf;
92 dfs(sx,sy,0);
93 if (ans==inf) cout<<-1<<endl;
94 else cout<<ans<<endl;
95 }
96 return 0;
97 }

poj 3009 Curling 2.0的更多相关文章

  1. POJ 3009 Curling 2.0【带回溯DFS】

    POJ 3009 题意: 给出一个w*h的地图,其中0代表空地,1代表障碍物,2代表起点,3代表终点,每次行动可以走多个方格,每次只能向附近一格不是障碍物的方向行动,直到碰到障碍物才停下来,此时障碍物 ...

  2. poj 3009 Curling 2.0 (dfs )

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11879   Accepted: 5028 Desc ...

  3. POJ 3009 Curling 2.0(DFS + 模拟)

    题目链接:http://poj.org/problem?id=3009 题意: 题目很复杂,直接抽象化解释了.给你一个w * h的矩形格子,其中有包含一个数字“2”和一个数字“3”,剩下的格子由“0” ...

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

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

  5. POJ 3009 Curling 2.0 回溯,dfs 难度:0

    http://poj.org/problem?id=3009 如果目前起点紧挨着终点,可以直接向终点滚(终点不算障碍) #include <cstdio> #include <cst ...

  6. poj 3009 Curling 2.0( dfs )

    题目:http://poj.org/problem?id=3009 参考博客:http://www.cnblogs.com/LK1994/ #include <iostream> #inc ...

  7. 【POJ】3009 Curling 2.0 ——DFS

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11432   Accepted: 4831 Desc ...

  8. 【原创】poj ----- 3009 curling 2 解题报告

    题目地址: http://poj.org/problem?id=3009 题目内容: Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  9. POJ P3009 Curling 2.0 题解

    深搜,向四个方向,在不越界的情况下一直闷头走,直到撞墙.到达终点就输出,没到就回溯. #include<iostream> #include<cstring> #include ...

随机推荐

  1. C#路径 (转载)

    一.获取当前文件的路径1.   System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName     获取模块的完整路径,包括文 ...

  2. VPS centos 6 安装图形界面

    在某种场合之下,我们使用的Linux还是要选择安装桌面环境的,所以在这里介绍一下如何给没有安装桌面环境的系统安装桌面环境.以Centos 6.5 为例演示一下如何安装桌面环境. 工具/原料 Linux ...

  3. jquery实现radio按纽全不选和checkbox全选的实例

    用jquery实现以下两个这个功能: 1.对所有单选按纽中radio全不选 单选按纽:<input type="radio" name="f1">A ...

  4. 问题记录-Fragment导包不同导致无法自动转型

    代码如下 public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle save ...

  5. [terry笔记]更改oracle用户名

    更改oracle的用户名 之前有个需求,整理一个schema的表.索引等规划到一个表空间里,利用expdp/impdp然后remap就完成了,但是整理好的用户名remap变更了,应用又不想修改其连接信 ...

  6. 任务管理界面添加显示RAM信息

    显示RAM信息的核心代码是大蛋的,我只不过是整理下教程而已! 大蛋应该不会介意的吧,首先你需要apktool和SystemUI.apk,framework-res.apk 然后开始加载框架和反编译.. ...

  7. 【微网站开发】之微信内置浏览器API使用

    最近在写微网站,发现了微信内置浏览器的很多不称心的地方: 1.安卓版的微信内浏览器底部总是出现一个刷新.前进.后退的底部栏,宽度很大,导致屏幕显示尺寸被压缩 2.分享当前网站至朋友圈时,分享的图片一般 ...

  8. .NET开源工作流RoadFlow-流程设计-流转条件设置(路由)

    当一个步骤后面有多个步骤时,可以设置为根据设置条件系统自动判断该流向哪些步骤,也叫路由. roadflow没有单独的路由步骤来设置条件,流程条件通过双击连线弹出条件设置框来设置. 1.sql条件 即通 ...

  9. SQLServer异常捕获

    在SQLserver数据库中,如果有很多存储过程的时候,我们会使用动态SQL进行存储过程调用存储过程,这时候,很可能在某个环节就出错了,但是出错了我们很难去跟踪到出错的存储过程,此时我们就可以使用异常 ...

  10. R中统计量的中英文解释

    Intercept————截距 formula————公式   Residual standard error残差标准差: 1.319 on 10 degrees of freedom 自由度为10 ...