迷宫【BFS+结构体\pair】
题目
代码-结构体
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
int mp[110][110];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int d[110][110];
struct node{
int x;
int y;
};
void bfs(){
queue<node> q;
memset(d,-1,sizeof d);
q.push({0,0});
d[0][0]=0;
while(q.size()!=0){
node tmp = q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=tmp.x + dx[i];
int ny=tmp.y + dy[i];
if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny]==0 &&d[nx][ny] == -1){
d[nx][ny] = d[tmp.x][tmp.y] + 1;
q.push({nx,ny});
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mp[i][j];
}
}
bfs();
cout<<d[n-1][m-1]<<endl;
}
代码-pair
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
int mp[110][110];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int d[110][110];
typedef pair<int,int> PII;
void bfs(){
queue<PII> q;
memset(d,-1,sizeof d);
q.push({0,0});
d[0][0]=0;
while(q.size()!=0){
PII tmp = q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=tmp.first + dx[i];
int ny=tmp.second + dy[i];
if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny]==0 &&d[nx][ny] == -1){
d[nx][ny] = d[tmp.first][tmp.second] + 1;
q.push({nx,ny});
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mp[i][j];
}
}
bfs();
cout<<d[n-1][m-1]<<endl;
}