zoukankan      html  css  js  c++  java
  • P1238 走迷宫

    原题链接 https://www.luogu.org/problemnew/show/P1238

    为了巩固一下刚学习的广搜,练一下迷宫类型的题 不过这道题我用的深搜.....

    看问题,我们就知道这道题和平时做的走迷宫的题差不多,只是把方案数改成了输出路径

    那也很好办,我们只要记录一下每一步的坐标,如果到了终点就输出记录下来的坐标就好了

    注意题目中给出的优先顺序:左上右下  表示被坑了一次qaq

    给出AC代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,m,a[300][2];  
    int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};  //注意题目中给出的顺序!!!   优先顺序:左上右下 
    int sx,sy,fx,fy,flag=0,t;      //sx,sy表示起点横纵坐标,fx,fy表示终点横纵坐标 
    bool vis[16][16];             //判断是否到达过 
    bool map[16][16];             //地图 
    void search(int x,int y)
    {
        if(x==fx&&y==fy)          //判断是否到终点 
        {
            for(int j=1;j<=t;j++)
            printf("(%d,%d)->",a[j][0],a[j][1]);    //输出路径 
            printf("(%d,%d)
    ",fx,fy);
            flag=1;               //标记为有解 
        }
        for(int i=0;i<4;i++)      //四个方向 
        {
            if(map[x+dx[i]][y+dy[i]]==1&&vis[x+dx[i]][y+dy[i]]==0&&x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m) 
            //判断是否在界内,以及该点是否到过和是否能走 
            {
                t++;             //步数+1 
                vis[x][y]=1;     //标记为1,表示该点已经走过 
                a[t][0]=x;       //记录横坐标 
                a[t][1]=y;       //记录纵坐标 
                search(x+dx[i],y+dy[i]);    //深搜的递归思想~,进一步搜索下去 
                vis[x][y]=0;     //回溯操作 
                t--;
            }
        }
        
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
           for(int j=1;j<=m;j++)
           cin>>map[i][j];
        cin>>sx>>sy;
        cin>>fx>>fy;
        search(sx,sy);                //开始搜索 
        if(flag==0) cout<<"-1";       //如果无解,则输出-1 
        return 0;
    }
  • 相关阅读:
    用户、角色、权限管理-设计方案之权限检测
    供电绘图计算软件-新增了图库管理功能
    AutoCAD使用技巧六则
    环境影像评价系统
    AutoCAD.net: 如何实现裁剪功能Trim
    AutoCAD 命令参考手册
    arx常用的一些函数功能表
    AutoCAD.net: Curve.GetSplitCurves的用法
    AutoCAD.net:有条件选择AutoCAD实体
    电台节目管理软件
  • 原文地址:https://www.cnblogs.com/xcg123/p/10726258.html
Copyright © 2011-2022 走看看