1 条题解

  • 1
    @ 2025-4-29 22:03:45

    题目很大,简单到炸

    方法思路:

    我知道你们不会看

    1. 数据结构​:

      • 使用point结构体存储当前坐标。
      • 使用二维字符数组a存储迷宫。
      • 使用二维布尔数组vis记录访问状态。
    2. BFS算法​:

      • 从起点S开始,使用队列进行广度优先搜索。
      • 每次从队列中取出一个点,检查是否是终点E
      • 如果不是终点,则向四个方向扩展,将可行的新点加入队列,并标记为已访问。
    3. 输入输出​:

      • 读取测试用例数量T
      • 对于每个测试用例,读取迷宫尺寸nm,然后读取迷宫内容。
      • 使用memset重置vis数组。
      • 调用bfs函数并输出结果,如果无法到达终点则输出oop!

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

    //万物皆可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;
    char a[205][205];
    int vis[205][205];
    int n,m;
    
    int bfs(int x,int y){
    	queue<point> q;
    	q.push({x,y});
    	while(!q.empty()){
    		point p=q.front();
    		q.pop();
    		int x=p.x;
    		int y=p.y;
    		if(a[x][y]=='E'){
    			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<n && ny>=0 && ny<m && !vis[nx][ny] && a[nx][ny]!='#'){
    				vis[nx][ny]=vis[x][y]+1;
    				q.push({nx,ny});
    			}
    		}
    	}
    	return -1;
    }
    
    signed main(){
    	std::ios::sync_with_stdio(false);cin.tie(0);
    	//freopen(".in","r",stdin);
    	//freopen(".out","w",stdout);
    	int T;
    	cin>>T;
    	while(T--){
    		cin>>n>>m;
    		int sx,sy;
    		memset(vis,0,sizeof(vis));
    		for(int i=0;i<n;i++){
    			for(int j=0;j<m;j++){
    				cin>>a[i][j];
    				if(a[i][j]=='S'){
    					sx=i;sy=j;
    				}
    			}
    		}
    		vis[sx][sy]=1;
    		int ans=bfs(sx,sy);
    		if(ans==-1){
    			cout<<"oop!";
    		} else {
    			cout<<ans;
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    最后提醒一下老师给的样例很恶心有坑,你的vis数组每次都要重置(代码直接贴这儿,不用谢我memset(vis,0,sizeof(vis));),到时候vis没重置WA别说我没提醒你

    严禁拷贝

    (谁TM拷贝是**)

    信息

    ID
    246
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    24
    已通过
    10
    上传者