• 迷宫问题 POJ


    题目大意

    题目不需要大意,poj居然还有中文题

    鸣谢

    特别鸣谢ljc大佬提供的方法!!!

    解法

    我们可能输出个最短路径的长度比较简单,但是输出最短路径真的是没有做过,这里有一种简单的方法

    因为我们的dfs是把所有的情况都遍历了一遍,那么是不是我们的答案的路径就在这其中呢?

    这样我们在判断条件的时候把老生常谈的那些什么路径数记录的变成如果sum<minn更新minn,然后记录这些路径

    回溯的时候,这里dfs用了三个参数x,y,cur。把cur回溯顺便就回溯了路径

    代码(为啥没有高亮。。。)

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int mp[5][5],bk[5][5];
    int dx[6]={-1,1,0,0};
    int dy[6]={0,0,-1,1};
    int minn=9999,sum,p,pp;
    struct node
    {
      int x,y;
    }ans[25],now[25];
    void dfs(int x,int y,int cur)
    {
      if(x==4&&y==4)
      {
        if(cur<minn)
        {
          minn=cur;
          for(int i=0;i<cur;i++)
          {
            ans[i].x=now[i].x;
            ans[i].y=now[i].y;
          }
        }
      }
      else
      {
        for(int i=0;i<4;i++)
        {
          int xx=x+dx[i];
          int yy=y+dy[i];
          if(!bk[xx][yy]&&mp[xx][yy]==0&&xx>=0&&yy>=0&&xx<5&&yy<5)
          {
            bk[xx][yy]=1;
            now[cur].x=x;
            now[cur].y=y;
            dfs(xx,yy,cur+1);
            bk[xx][yy]=0;
            now[cur].x=0;
            now[cur].y=0;
          }
        }
      }
    }
    int main()
    {
      for(int i=0;i<5;i++)
      for(int j=0;j<5;j++)
      cin>>mp[i][j];
      bk[0][0]=1;
      dfs(0,0,0);
      for(int i=0;i<minn;i++)
      printf("(%d, %d)
    ",ans[i].x,ans[i].y);
      printf("(4, 4)");
    }
    
    
  • 相关阅读:
    Docker基本架构
    Dockerfile怎么创建镜像
    Dockerfile的指令
    Dockerfile基本结构
    Docker其它安全特性
    运行项目psychologicalTest
    第2章 安装Nodejs 2-4 Linux下安装Nodejs
    第2章 安装Nodejs 2-3 Windows下安装Nodejs
    第2章 安装Nodejs Nodejs基础 课程介绍
    2-2 第二天 利用 QQ 浏览器代理调试端口
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/10120064.html
Copyright © 2020-2023  润新知