- 迷宫问题
da老看我代码有什么问题
- 2024-3-14 13:55:12 @
本地测批示没有,提交就3个RE
/*函数网
main()
/ \
in() bfs()
/ \
print() check()
*/
//声明
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
//定义
bool R[100][100];//路径
bool V[100][100];//vis数组
struct D{//点
int x,y;
int fx,fy;
};
D A[100][100];//answer数组
int vx[]={0,0,-1,1},vy[]={-1,1,0,0};//上下左右坐标变化
int main();
//main函数
int main(){
void in();//输入函数
void bfs();//BFS函数
in();
bfs();
return 0;
}
//1级函数
void in(){
for(int i=1;i<6;i++)
for(int j=1;j<6;j++){
cin>>R[i][j];
R[i][j]=!R[i][j];
A[i][j].x=i;
A[i][j].y=j;
}
return;
}
void bfs(){
void print();//打印数组函数
bool check(int,int);//检查路径函数
A[1][1].fx=A[1][1].fy=0;
queue<D> q;//BFS队列
q.push(A[1][1]);
while(1){
D a=q.front();
q.pop();
// cout<<a.x<<" "<<a.y<<"\n";
if(a.x+a.y==10){
print();
return;
}
for(int i=0;i<4;i++)
if(check(a.x+vx[i],a.y+vy[i])){
// cout<<a.x+vx[i]<<" "<<a.y+vy[i]<<"\n";
V[a.x+vx[i]][a.y+vy[i]]=1;
A[a.x+vx[i]][a.y+vy[i]].fx=a.x;
A[a.x+vx[i]][a.y+vy[i]].fy=a.y;
q.push(A[a.x+vx[i]][a.y+vy[i]]);
}
}
return;
}
//2级函数
void print(){
stack<D> s;
s.push(A[5][5]);
while(s.top().x+s.top().y!=2)
//cout<<s.top().fx<<" "<<s.top().fy<<"\n",
s.push(A[s.top().fx][s.top().fy]);
while(s.top().x+s.top().y<=10){
cout<<"("<<s.top().x-1<<", "<<s.top().y-1<<")\n";
s.pop();
}
}
bool check(int x,int y){
cout<<x<<" "<<y<<"\n";
return x>=0&&y>=0&&!V[x][y]&&R[x][y];
}
1 comments
-
C23huangyuran LV 8 @ 2024-3-14 13:56:15
注释是我自己写代码的时候帮助理解的,所以,不用我介绍变量了吧~
- 1
Information
- ID
- 740
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 74
- Accepted
- 21
- Uploaded By