zoukankan      html  css  js  c++  java
  • P2802 【回家】

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

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

    好吧,我也没分清。。

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

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

    具体解释看代码:::

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

    祝大家编程愉快哦~~~

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

  • 相关阅读:
    一篇带你了解私有仓库 Harbor 的搭建
    docker优化之Cgroup资源配置
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    Docker镜像、私有仓库
    了解Docker Consul 工具 ,一篇就够了
    运维必备之日志分析工具ELK
    mysql5.6与5.7版本的区别
    Docker Compose-容器编排工具
    SQL中对于增加和删除“约束”的语句
    python3-基础5
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11123124.html
Copyright © 2011-2022 走看看