PS:以前看到题目这么长就没写下去了。今天做了半天,没做出来。准备看题解,打开了网站都忍住了,最后还是靠自己做出来的。算是一点进步吧。

分析:

  题目的意思没明白或者理解有偏差都没办法做题。看样例3和样例4,数据差不多的,但是一个输出4,但是另外的一个却是-1。再去看题目就会发现,题目的意思是在撞碎石头之前必须走一个为值0的格子。我理解为需要加速。对样例4,答案4是这样出来的:初始位置为(1,3),第一步是到达(1,2),并且使得(1,1)点的值为0(撞碎了这里的石头,0代表可以通行);第二步是到达(1,3),并且是得(1,4)点的值为0;第三步是到达(1,4),并且使得(1,5)的值为0;第四步是到达(1,5),发现到达了终点,结束。样例5也可以这样得到。

  样例6错误的原因是因为超过了10步,这是题目的要求,超过10步就当不能到达处理。

  这样一来,可以知道了起点和终点的处理了。起点(终点)的坐标记录下来,但是标记为0。

  还有就是实现如何对一个方向进行搜索,以及如何标记在撞石头之前已经走过0的位置(不能是这种情况:起点是0,下一点就撞石头)。这思考一下就可以实现了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; void DFS(int x,int y,int di);
const int N=,INF=0x3f3f3f3f;
bool vis[N][N];
int r,c,t,ex,ey,sx,sy,mx;
int dx[]={,,,-};
int dy[]={,-,,};
bool isin(int x,int y)
{
return x>=&&x<r&&y>=&&y<c;
}
void DDFS(int a,int b,int x,int y,int d)
{
int i,j;
if(t>) return ;
i=x+a; j=y+b;
if(!isin(i,j)) return ;
if(!vis[i][j])
{
d=;
if(i==ex&&j==ey)
{
mx=min(t,mx);
}
DDFS(a,b,i,j,d);
}
else if(vis[i][j]&&d)
{
vis[i][j]=;
d=;
t++;
DFS(x,y,d);
t--;
vis[i][j]=;
}
}
void DFS(int x,int y,int d)
{ for(int k=;k<;k++)
{
DDFS(dx[k],dy[k],x,y,d);
}
}
int main()
{
//freopen("test.txt","r",stdin);
while(scanf("%d%d",&c,&r)!=EOF&&c)
{
int x;
for(int i=;i<r;i++){
for(int j=;j<c;j++){
scanf("%d",&x);
if(x==)
{
ex=i;ey=j;
vis[i][j]=;
}
else if(x==)
{
sx=i;sy=j;
vis[i][j]=;
}
else vis[i][j]=x;
}
}
t=;
mx=INF;
DFS(sx,sy,);
if(mx==INF) printf("-1\n");
else printf("%d\n",mx);
}
return ;
}

  DFS(x,y,d) : (x,y)是起点的坐标,d是标记是否有经过被标记0的点。1表示经过了,0表示没有。

  DDFS(a,b,x,y,d) :(a,b)是方向向量,表明向什么方向搜索;x,y,d同上。

  通过d的记录就可以知道石头可不可以撞碎。使用(a,b)就可以沿着同一方向一直深入。

poj3009 Curling 2.0 深搜的更多相关文章

  1. POJ-3009 Curling 2.0 (DFS)

    Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But th ...

  2. POJ3009——Curling 2.0(DFS)

    Curling 2.0 DescriptionOn Planet MM-21, after their Olympic games this year, curling is getting popu ...

  3. poj3009 Curling 2.0 (DFS按直线算步骤)

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14563   Accepted: 6080 Desc ...

  4. poj3009 Curling 2.0(很好的题 DFS)

    https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...

  5. POJ3009 Curling 2.0

    正式做POJ的第一题,做出来后又看了别人的代码,就又完善了一下,也通过了.参考 http://blog.sina.com.cn/s/blog_4abcd9bc0100phzb.html 改了之后觉得写 ...

  6. POJ3009 Curling 2.0(DFS)

    迷宫问题求最短路. 略有不同的是假设不碰到石头的话会沿着一个方向一直前进,出界就算输了.碰到石头,前方石头会消失,冰壶停在原地. 把这个当作状态的转移. DFS能够求出其最小操作数. #include ...

  7. POJ3009 Curling 2.0(DFS)

    题目链接. 分析: 本题BFS A不了. 00100 00001 01020 00000 00010 00010 00010 00010 00030 对于这样的数据,本来应当是 5 步,但bfs却 4 ...

  8. ACM 海贼王之伟大航路(深搜剪枝)

    "我是要成为海贼王的男人!" 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着"唯一的大秘宝"--ONE PIECE).而航程中间,则是各式各样的 ...

  9. nyoj-20-吝啬的国度(深搜)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 在一个吝啬的国度里有N个城市.这N个城市间仅仅有N-1条路把这个N个城市连接起来.如今,Tom在第S号城市 ...

随机推荐

  1. 安装RHEL7红帽操作系统

    1.单击“开启此虚拟机”启动RHEL 7系统安装. 开启虚拟机 2.通过键盘方向键选择Install Red Hat Enterprise Linux 7.0选项,然后回车,开始安装RHEL7操作系统 ...

  2. Linux - VMware和Centos安装

    目录 Linux - VMware和Centos安装 选择性 下载centos系统ISO镜像 安装虚拟机VMware虚拟机 1. 准备vmware软件 2. 解压软件包, 当前选择vm12 3. vm ...

  3. datetime库 日期与时间

    datetime是一个关于时间的库,主要包含的类有: date    日期对象,常用的属性有year,month,day time 时间对象,hour,minute,second,毫秒 datetim ...

  4. 最小生成树prime算法模板

    #include<stdio.h> #include<string.h> using namespace std; int map[505][505]; int v, e; i ...

  5. Servlet请求参数编码处理(POST & GET)

    小巧,但在中文语境下,还是要注意的. 以下是关键语句,注意转码的先后顺序,这源于GET是HTTP服务器处理,而POST是WEB容器处理: String name = request.getParame ...

  6. [luogu1373]小a和uim之大逃离_动态规划

    小a和uim之大逃离 题目大意:有一个n*m的矩阵.每个格子上有一坨0~k不等量的权值.有两个人,每个人任选一个格子作为出发点,并只能向下或向右走.求最后两个人所得到的权值mod k相等的方案数. 注 ...

  7. DATASNAP中间件调用带OUTPUT参数的存储过程

    服务端: function TServerMethods1.spExecOut(funcId, sqlId, inParams: OleVariant): OleVariant;var d: Tfrm ...

  8. 开源 免费 java CMS - FreeCMS1.8 留言管理

    项目地址:http://code.google.com/p/freecms/ 留言管理 管理当前管理网站的留言数据. 1. 回复留言 选择须要回复的留言.然后点击"回复". 注意: ...

  9. 菜鸟学Java(二十二)——又一次认识泛型

    泛型是Java SE 1.5的新特性,泛型的本质是參数化类型,也就是说所操作的数据类型被指定为一个參数.这样的參数类型能够用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言 ...

  10. 分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机

    微软官方有一套专门用于SharePoint 2010, Exchange 2010 Demo的虚拟机:SharePoint 2010: Information Worker Demonstration ...