在使用某博主关于BFS算法求解(迷宫)最短路径问题时,我看到了这样几条语句,并提出了我的疑问。
(1)typedef pair<int, int> PII;//pair<int,int>?
(2)queue<PII> q;//队列中使用二维数组作为元素?
(3) q.push({0,0});//怎么push一个二维的数组元素(x,y)
(4)auto 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;
}
以下是报错内容截图:
总结一下我的问题在于:
(1)不晓得该怎么传{x,y}到队列里面。
(2)auto的用法在这里为什么行不通?
(3)c++11中头文件<bits/stdc++.h>据说是包括了很多头文件……那在这个地方,可以只写它吗?