JIENANYA 2021-11-10 13:26 采纳率: 66.7%
浏览 20
已结题

如何使用“{ x,y}”向队列中传入二位数组元素(x,y)?

在使用某博主关于BFS算法求解(迷宫)最短路径问题时,我看到了这样几条语句,并提出了我的疑问。

1typedef pair<int, int> PII;//pair<int,int>?2)queue<PII> q;//队列中使用二维数组作为元素?3) q.push({0,0});//怎么push一个二维的数组元素(x,y)4auto t=q.front();//哪里来的auto?

我尝试在dev上运行,以下是完整的代码,和我在CSDN上找到的关于使用“{}”返回等的错误改写(其后用“//”标识),但是任然没有解决问题。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
//#include <bits/stdc++.h>
using namespace std;
//add_definitions("std=c++11");
typedef pair<int, int> PII;//
const int N = 110;
int s[N][N];
int n,m;
int g[N][N];
int bfs()
{
    queue<PII> q;//
    memset(g, -1, sizeof g);//
    q.push({0,0});//
    g[0][0]=0;
    int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};//
    while(q.size())
    {
        auto t=q.front();//
        q.pop();
        for(int i=0;i<4;i++)
        {
            int a=t.first+dx[i];
            int b=t.second+dy[i];
            if(a>=0 && a<n && b>=0 && b<m && g[a][b]==-1 && s[a][b]==0)//
            {
                g[a][b]=g[t.first][t.second]+1;
                q.push({a,b});//
            }
        }
    }
    return g[n-1][m-1];
}
int main()
{cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>s[i][j];
cout<<bfs()<<endl;
}

以下是报错内容截图:

img

以下是我在搜索过后找到的解决方案。(我没看懂、用了方法也没有成功)

总结一下我的问题在于:
(1)不晓得该怎么传{x,y}到队列里面。
(2)auto的用法在这里为什么行不通?
(3)c++11中头文件<bits/stdc++.h>据说是包括了很多头文件……那在这个地方,可以只写它吗?

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2021-11-10 13:35
    关注

    估计你的编译器不支持c++11标准,或者你么有打开你的编译器的C++11标准的开关,如果不支持的话可以用以下语句
    q.push(make_pair(1,1));
    替代

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月10日

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答