首页 > 其他分享 > 迷宫问题

迷宫问题

时间:2022-09-02 13:57:14浏览次数:44  
标签:pre nx end int res 迷宫 问题 ny

https://www.acwing.com/problem/content/1078/

注意记录状态的唯一性

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> pii;
const int N = 1050;
int g[N][N];
bool st[N][N];
pii pre[N][N];
pii ne[N][N];
int n;
int dx[] = { -1, 1, 0, 0 }, dy[] = { 0, 0, -1, 1 };

void bfs(int sx, int sy)
{
    queue<pii> q;
    q.push({ sx, sy });
    st[sx][sy] = true;

    while (q.size())
    {
        auto t = q.front();
        q.pop();
        if (t.x == n && t.y == n) return;
        for (int i = 0; i < 4; i++)
        {
            int nx = t.x + dx[i], ny = t.y + dy[i];
            if (nx<1 || nx>n || ny<1 || ny>n || st[nx][ny] == true) continue;
            if (g[nx][ny] == 1) continue;
            q.push({ nx, ny });
            st[nx][ny] = true;
            pre[nx][ny] = { t.x, t.y };
            //ne[t.x][t.y] = { nx, ny }; 
            //这儿不能这么写,因为如果你用t.x,t.y也就是扩展之前的那个点的话,
            //无法唯一表示这个状态,他会再循环里面更新多次,一般在bfs记录状态的时候,
            //都是些nx,ny,也就是扩展之后的那个点,而且也因为每个点只能遍历一次。
        }
    }
}

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cin >> g[i][j];
        }
    }

    bfs(1,1);


    vector<pii> res;

    res.push_back({ n , n });

    pii end = { n,n};
    while (1)
    {
        res.push_back(pre[end.x][end.y]);
        if (pre[end.x][end.y].x == 1 && pre[end.x][end.y].y == 1) break;
        end = pre[end.x][end.y];
    }

    for (int i = res.size() - 1; i >= 0; i--)
    {
        cout << res[i].x-1<< " " << res[i].y-1<< endl;
    }
    return 0;
}

标签:pre,nx,end,int,res,迷宫,问题,ny
From: https://www.cnblogs.com/xjtfate/p/16649595.html

相关文章

  • Flask 学习-38.Flask-RESTful 序列化输出中文显示问题
    前言flask接口无法显示中文,可以添加全局配置JSON_AS_ASCII=False,但是解决不了Flask-RESTful序列化输出中文问题flask配置中文显示添加全局配置项JSON_AS_ASCII=Fa......
  • window2012ServerR2 上安装mysql8遇到的问题
    安装教程:https://baijiahao.baidu.com/s?id=1734145282045952263&wfr=spider&for=pcwindow2012ServerR2上我在安装安装mysql8之前,最好把操作系统补丁打全,否则会遇到很多......
  • Java表达式转型问题
    1规则计算时,所有char、short、byte类型会转为int型。final修饰的变量不会自动转型,所以final修饰的byte不会自动转为int有一个数是long/float/double,计算结果也是long/f......
  • 二叉树路径问题
    问题分类1.自顶向下从某一结点(不一定是根节点),从上到下寻找路径,到某一节点(不一定是叶节点)结束二叉树的所有路径......
  • 关于微信支付API证书LINUX安装问题
    什么是ssl证书  SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL证书就是遵守SSL协议,由受信任的数字......
  • 【团队合作与交流问题】竞赛、课程项目团队合作问题
    1前言作为一名在大学时代,也就打过几场团队合作的竞赛,跟包括但不限于与自己班级同学一起搞课程项目,与自己的实验室老师的利益博弈。我总是在烦恼,如何跟人交流,如何更加有......
  • CSS 面试问题的答案——第一部分 (1-10/34)
    CSS面试问题的答案——第一部分(1-10/34)该材料有助于为前端职位的面试做准备。我回答了GitHub存储库中最受欢迎的问题列表中的所有CSS问题——前端-开发者-面试-......
  • 关于使用命令行 cf login 登录 SAP BTP CloudFoundry 环境的问题
    在SAPBTP平台CloudFoundry环境找到APIendpoint:然后使用命令行cfapi,后面跟上这个APIendpoint:然后使用cflogin命令行登录:如果password输入错误,会遇到上......
  • 【已解决】element ui版本安装问题
    使用npmielement-ui-S报错使用cnpminstall--saveelement-ui不报错 (注意是:cnpm,这是用淘宝镜像安装的)如果你不能使用cnpm的话,执行下面语句就可以了。npminst......
  • 记一次用arthas排查jvm中CPU占用过高问题
    记一次使用arthas排查jvm中CPU占用过高问题。这工具屌爆了碾压我目前使用的全部JVM工具。安装小试curl-Ohttps://arthas.aliyun.com/arthas-boot.jarjava-jararth......