@[yjjh](/user/1036002) bfs题建议用queue,模拟队列可能会炸,除非算清了状态数或者写节点回收
by silhouettel @ 2024-07-03 17:21:03
@[silhouettel](/user/772661) 谢谢,已改:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int N=1002;
int dt[N][N],n,x2,y2;
int xx[4]={1,0,-1,0};
int yy[4]={0,1,0,-1};
std::queue<int>q1;
std::queue<int>q2;
std::queue<int>q3;
inline int bbfs(int x,int y,int bs){
for(int i=0;i<4;i++){
if(x+xx[i]>=1&&x+xx[i]<=n&&y+yy[i]>=1&&y+yy[i]<=n&&dt[x+xx[i]][y+yy[i]]==0){
if(x+xx[i]==x2&&y+yy[i]==y2)return bs+1;
q1.push(x+xx[i]);q2.push(y+yy[i]);q3.push(bs+1),dt[x+xx[i]][y+yy[i]]=1;
}
}
return 0;
}
inline int bfs(){
while(q1.size()){
int t=bbfs(q1.front(),q2.front(),q3.front());
if(t)return t;
q1.pop();q2.pop();q3.pop();
}
}
int main(){
std::cin >>n;
for(int i=0;i<n;i++){
string str;
std::cin >>str;
for(int j=0;j<n;j++){
dt[i][j]=str[j]-'0';
}
}
int x,y;
std::cin >>x>>y>>x2>>y2;
q1.push(x);q2.push(y);q3.push(0);
std::cout <<bfs();
return 0;
}
```
可是还是一样啊。。。
by yjjh @ 2024-07-03 17:30:50
@[yjjh](/user/1036002)
帮你改了一个地方 现在大抵是能过的
你输入的时候下标是从0开始的
但是bfs的时候是从1开始的
```cpp
#include <iostream>
#include <queue>
using namespace std;
const int N=1011;
int dt[N][N],n,x2,y2;
int xx[4]={1,0,-1,0};
int yy[4]={0,1,0,-1};
std::queue<int>q1;
std::queue<int>q2;
std::queue<int>q3;
inline int bbfs(int x,int y,int bs){
for(int i=0;i<4;i++){
if(x+xx[i]>=1&&x+xx[i]<=n&&y+yy[i]>=1&&y+yy[i]<=n&&dt[x+xx[i]][y+yy[i]]==0){
if(x+xx[i]==x2&&y+yy[i]==y2)return bs+1;
q1.push(x+xx[i]);q2.push(y+yy[i]);q3.push(bs+1),dt[x+xx[i]][y+yy[i]]=1;
}
}
return 0;
}
inline int bfs(){
while(q1.size()){
int t=bbfs(q1.front(),q2.front(),q3.front());
if(t) return t;
q1.pop();q2.pop();q3.pop();
}
}
int main(){
std::cin >>n;
for(int i=0;i<n;i++){
string str;
std::cin >>str;
for(int j=0;j<n;j++){
dt[i + 1][j + 1]=str[j]-'0';
}
}
int x,y;
std::cin >>x>>y>>x2>>y2;
q1.push(x);q2.push(y);q3.push(0);
std::cout <<bfs();
return 0;
}
by silhouettel @ 2024-07-03 18:28:36
@[silhouettel](/user/772661) 谢谢大佬!AC,已关!
by yjjh @ 2024-07-04 08:32:38
不是你为什么要在std里调用std???
by _Panyc @ 2024-07-04 09:06:21