社区讨论
01迷宫求调
P8628[蓝桥杯 2015 国 AC] 穿越雷区参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo26kt7l
- 此快照首次捕获于
- 2023/10/23 08:50 2 年前
- 此快照最后确认于
- 2023/11/03 09:05 2 年前
感觉是 bfs 里几个判断的问题,但是实在没找到问题出在哪,恳请大佬指点。
CPP#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,num,ans;
};node arr[110][110];
bool f[110][110];
queue <node> q;
const int w[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
int sx,sy,ex,ey;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
arr[i][j].ans=0;
char c;
cin>>c;
arr[i][j].x=i,arr[i][j].y=j;
if(c=='+')
arr[i][j].num=1;
else if(c=='-')
arr[i][j].num=-1;
else if(c=='A'){
sx=i,sy=j;
arr[i][j].num=-2;
}
else if(c=='B'){
ex=i,ey=j;
arr[i][j].num=-2;
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[i][j]=0;
q.push(arr[sx][sy]);
f[sx][sy]=1;
while(!q.empty()){
int now_x=q.front().x,now_y=q.front().y,now_ans=q.front().ans,now_num=q.front().num;
for(int k=0;k<=3;k++){
int tx=now_x+w[k][0],ty=now_x+w[k][1];
if(tx==ex&&ty==ey){
cout<<now_ans+1<<"\n";
return 0;
}
if(tx<1||ty<1||tx>n||ty>n)
continue;
if(f[tx][ty])
continue;
if(arr[tx][ty].num+now_num==2||arr[tx][ty].num+now_num==-2)
continue;
arr[tx][ty].ans=now_ans+1;
q.push(arr[tx][ty]);
f[tx][ty]=1;
}
q.pop();
}
cout<<-1<<"\n";
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...