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)就可以沿着同一方向一直深入。

最新文章

  1. android中将EditText改成不可编辑的状态
  2. wex5 实战 二维码生成,扫描,蓝牙打印
  3. css实现元素居中
  4. Oracle 监听器日志文件过大导致监听异常
  5. Loadrunner性能指标分析
  6. Oracle存储过程的调用(返回参数)
  7. c# socket编程简单例子
  8. eclipse中自动生成javadoc文档
  9. 双网卡route配置
  10. Android 调用webservice faultactor 错误
  11. SE 2014年4月16日
  12. Extjs mvc
  13. WPF MVVM模式的一些理解
  14. linux下Tomcat 安装后执行startup.sh,出现– Cannot find …bin/catalina.sh
  15. Qt核心机制与原理
  16. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
  17. OpenCV图像分割1
  18. http协议及长连接和短连接
  19. XXX系统利益相关者分析
  20. OpenCV 学习笔记03 threshold函数

热门文章

  1. PostgreSQL使用总结
  2. Linux文件、目录属性
  3. 解决Eclipse导入项目后Validating验证缓慢的问题
  4. 【hiho一下 第144周】机会渺茫
  5. SecureCRT的设置和美化
  6. ELECTRON开发环境配置方法
  7. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)
  8. &amp;lt;LeetCode OJ&amp;gt; 268. Missing Number
  9. Vim技巧之四大模式_普通模式
  10. apache禁止訪问某些文件或文件夹的方法