1 条题解

  • 1
    @ 2025-4-27 22:01:12

    题目肥肠简单 先遍历后输出

    方法思路

    我知道你们不会看

    1. 输入处理​:读取5x5的迷宫矩阵。
    2. BFS初始化​:使用队列来进行BFS遍历,队列中存储当前位置以及到达该位置的路径。
    3. 访问标记​:维护一个访问数组来记录已经访问过的位置,避免重复处理。
    4. 方向移动​:定义四个可能的移动方向(上、下、左、右),对于每个当前位置,检查这四个方向是否可以移动(即是否为0且未被访问过)。
    5. 路径记录​:在移动过程中,记录到达每个位置的路径,直到到达终点。
    6. 输出路径​:到达终点后,输出从起点到终点的最短路径。

    好了,话不说,直接上代码 我知道你们只看这里

    //万物皆可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
    上传者