(づ ̄3 ̄)づ╭❤~(题面哦~~)

当初做的时候也借鉴了一些题解,发现确实有很多人都是在n和m上分不清。。

好吧,我也没分清。。

然后就一直不停错,还找不出来原因。。

最后狠心把所有判断dfs停止的条件单独列出来,终于找到了问题。。。

具体解释看代码:::

 #include<iostream>
using namespace std;
int n,m,ans=;//ans的值要赋大一点
int a[][],b[][];//第一个读入,第二个判断有没有走过
void dfs(int x,int y,int an,int hp){
if(hp==||y>m||x>n||x<=||y<=||a[x][y]==||b[x][y]==||an>ans)return;//判停条件,越界,不是最优解,没有生命值了,有障碍之类的,一定要注意区分n和m,我之前就一直写的是y>n,然后不停70分。
if(a[x][y]==){//如果到终点的情况
ans=min(ans,an);//其实有上面的判断,也可以直接写ans=an,也不会有错
return;//返回
}
if(a[x][y]==)hp=;//泉水。。
b[x][y]=;//标记走过了
dfs(x+,y,an+,hp-);//往上走
dfs(x,y+,an+,hp-);//往右走
dfs(x-,y,an+,hp-);//往下走
dfs(x,y-,an+,hp-);//往左走
b[x][y]=;//之前标记的,现在去掉
}
int main(){
int p,q;
cin>>n>>m;//读入
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
cin>>a[i][j];//读入,考场上建议用scanf,比较快
if(a[i][j]==)p=i,q=j;//一定要标记起点,不然会错,具体几个点不是很清楚。。。
}
}
dfs(p,q,,);//调用函数
if(ans==)cout<<-<<endl;//如果ans值没变,就说明不能到终点,输出-1
else cout<<ans<<endl;//否则输出步数
return ;}

祝大家编程愉快哦~~~

新人开博鼓励一下吧~~~

最新文章

  1. PHP常用算法
  2. POJ 2411 Mondriaan&amp;#39;s Dream
  3. Windows如何使用jstack跟踪异常代码
  4. 如何关闭windows电脑的开机自启程序
  5. openssl 学习之从证书中提取RSA公钥N 和 E
  6. php-引号中出现$
  7. JS 公共方法
  8. $(this) 和 this
  9. WEB服务器:Apache、Tomcat、JBoss、WebLogic、Websphere、IIS的区别与关系
  10. Razor Engine,动态脚本语言,mvc上的语法,适用于文件内容生成,静态网页生成等。
  11. Linux安装git和maven的详细过程
  12. 通俗易懂的来理解Iaas,Paas,SaaS
  13. Mac下多个jdk自由切换
  14. 剑指offer面试题6:重建二叉树
  15. python 文本或句子切割,并保留分隔符
  16. 【IPC进程间通讯之二】管道Pipe
  17. RESTful的理解与设计【PHP】
  18. Live2D 博客页面添加板娘
  19. 剑指offer-变态跳台阶09
  20. DefaultHttpClient 在oppo A57手机上网络请求报错

热门文章

  1. Linux排查问题工具汇总
  2. ZOJ3471Most Powerful(状态压缩)
  3. 【洛谷P3957】跳房子
  4. 原型模式故事链(5)--JS变量作用域、作用域链、闭包
  5. hadoop namenode切换
  6. 一个简单的c++类的定义和实例化
  7. 【LuoguP5383】[模板]普通多项式转下降幂多项式
  8. vuex中mapState、mapMutations、mapAction的理解
  9. docker部署war+tomcat8
  10. 在linux 下安装nginx