1 条题解
-
1
题目肥肠简单 先遍历后输出
方法思路
我知道你们不会看- 输入处理:读取5x5的迷宫矩阵。
- BFS初始化:使用队列来进行BFS遍历,队列中存储当前位置以及到达该位置的路径。
- 访问标记:维护一个访问数组来记录已经访问过的位置,避免重复处理。
- 方向移动:定义四个可能的移动方向(上、下、左、右),对于每个当前位置,检查这四个方向是否可以移动(即是否为0且未被访问过)。
- 路径记录:在移动过程中,记录到达每个位置的路径,直到到达终点。
- 输出路径:到达终点后,输出从起点到终点的最短路径。
好了,话不说,直接上代码
我知道你们只看这里//万物皆可dfs #include<bits/stdc++.h> using namespace std; #define endl "\n" #define int long long int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; //int dx[]={-1,1,0,0,-1,1,-1,1}; //int dy[]={0,0,-1,1,-1,1,1,-1}; struct point{//节点 int x; int y; }; const int N=1e5+5; int a[10][10]; int vis[10][10]; point path_o[15][15]; int n; void input_2(auto *array,int array_long_c,int array_long_r){//输入用的,偷了个懒 for(int i=0;i<array_long_c;i++){ for(int j=0;j<array_long_r;j++){ cin>>array[i][j]; } } } int bfs(int x,int y){//bfs不用我多说,懂的都会 queue<point> q; q.push({0,0}); while(!q.empty()){ point p=q.front(); q.pop(); int x=p.x; int y=p.y; if(x==4 && y==4){ return vis[x][y]-1; } for(int i=0;i<4;i++){ int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0 && nx<5 && ny>=0 && ny<5 && a[nx][ny]==0 && vis[nx][ny]==0){ path_o[nx][ny]={x,y}; vis[nx][ny]=vis[x][y]+1; q.push({nx,ny}); } } } return -1; } void output(){//输出节点 stack<point> path_i; int x=4; int y=4; while(x!=0 || y!=0){ path_i.push({x,y}); point p=path_o[x][y]; x=p.x; y=p.y; } path_i.push({0,0}); while(!path_i.empty()){ point p=path_i.top(); path_i.pop(); cout<<"("<<p.x<<", "<<p.y<<")"<<endl; // ^ // 有空格 } return ; } signed main(){ std::ios::sync_with_stdio(false);cin.tie(0); //freopen(".in","r",stdin); //freopen(".out","w",stdout); input_2(a,5,5); int k=bfs(0,0); output(); return 0; } //
最后提醒一下
题目很恶心(0, 0)逗号后有空格,到时候没加空格WA别说我没提醒你(本人就被坑了个WA)严禁拷贝!!!
(谁拷贝是**)
信息
- ID
- 245
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 22
- 已通过
- 9
- 上传者