dfs 求调 TLE

B3625 迷宫寻路

cqbzrjx @ 2024-03-16 09:53:57


//洛谷 B3625 迷宫寻路 
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0};//四个方向
int n,m;
int sx,sy,ex,ey;//sx和sy指起点坐标,ex和ey指终点坐标
int vis[105][105];//当前点搜过的情况
char mp[105][105];//地图
int res;//存储最终值
inline bool check(int x,int y)
{
    if(mp[x][y] == '#') return false;//遇到有怪兽的方格的情况
    if(x < 0 || x >= n || y < 0 || y >= m) return false;//超出边界的情况
    if(vis[x][y]) return false;//当前以搜过的情况
    return true;
}
inline void dfs(int x,int y,int step)//step为步数
{
    vis[x][y] = 1;
    if(x == ex && y == ey)//找到终点
    {
        res = min(res,step);//存储值
        return;
    }
    for(int i = 0;i < 4;i++)//四个方向方向
    {
        int fx = x + dx[i];//进行搜索的x坐标
        int fy = y + dy[i];//进行搜索的y坐标
        if(check(fx,fy))//判断是否可行
        {
            dfs(fx, fy,step + 1);
            vis[fx][fy] = 0;
        }
    }
    return;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    res = 1e5;
    memset(vis,0,sizeof vis);
    for(int i = 0;i < n;i++)
    {
        cin>>mp[i];
    }
    sx = 0,sy = 0,ex = n - 1,ey = m - 1;
    dfs(sx,sy,0);//搜索
    if(res == 1e5) cout<<"No";
    else cout<<"Yes";
    return 0;
}

by AKPC @ 2024-03-16 10:32:40

用bfs


by cdxxmashaoyang @ 2024-03-29 21:25:17

#include<bits/stdc++.h>
using namespace std;
const int N=110;
typedef pair<int,int>PII; 
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
char g[N][N];
int n,m,d[N][N];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>g[i][j];
    queue<PII>q;
    memset(d,-1,sizeof d);
    d[1][1]=1;
    q.push({1,1});
    while(q.size())
    {
        PII t=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int tx=t.first+dx[i],ty=t.second+dy[i];
            if(tx<1||tx>n||ty<1||ty>m) continue;
            if(g[tx][ty]=='#') continue;
            if(d[tx][ty]!=-1) continue;
            d[tx][ty]=d[t.first][t.second]+1;
            q.push({tx,ty});
        }
    }
    cout<<d[n][n]<<endl;
    return 0;
}

给个关注吧,能不能加一下www.luogu.com.cn/team/60983


|