80分dfs求调!

B3625 迷宫寻路

Syncc @ 2023-08-10 15:05:17

#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0},n,m;
bool vis[1005][1005],flag=0;
char g[1005][1005];
void dfs(int x,int y){
    if(x==n && y==m){
        flag=1;
        return ;
    }
    for(int i=0;i<4;i++){
        int nx=x+dx[i],ny=y+dy[i];
        if(nx<1 || nx>n || ny<1 || ny>m){
            continue;
        }
        if(g[nx][ny]=='.' && vis[nx][ny]==0){
            vis[nx][ny]=1;
            dfs(nx,ny);
        }
    }
}
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>g[i][j];
        }
    }
    if(g[1][1]=='#' || g[n][m]=='#'){
        cout<<"No";
        return 0;
    } 
    vis[1][1]=1;
    dfs(1,1);
    if(flag==0){
        cout<<"No";
    }else{
        cout<<"Yes";
    }
    return 0;
}

by liu_le_chen @ 2023-08-10 15:12:46

if(g[1][1]=='#' || g[n][m]=='#'){
    cout<<"No";
    return 0;
} 

这个判断好像不用


by liu_le_chen @ 2023-08-10 15:15:56

if(g[nx][ny]=='.' && vis[nx][ny]==0){
    vis[nx][ny]=1;
    dfs(nx,ny);
    vis[nx][ny]=0;
}

这是深搜,好像要回溯


by liu_le_chen @ 2023-08-10 15:27:27

#include<bits/stdc++.h>
using namespace std;
long long n,m,f,flag[1001][1001],vis[4][2]={-1,0,1,0,0,-1,0,1};
char arr[1001][1001];
struct node{
    int x,y;
};
queue<node> q;
void bfs(){
    q.push({1,1});
    flag[1][1]=1;
    while(!q.empty()){
        for(int i=0;i<4;i++){
            int xx=q.front().x+vis[i][0];
            int yy=q.front().y+vis[i][1];
            if(arr[xx][yy]=='.' && flag[xx][yy]==0 && xx>=1 && xx<=n && yy>=1 && yy<=m){
                flag[xx][yy]=1;
                if(xx==n && yy==m){
                    cout<<"Yes";
                    f=0;
                    return;
                }
                q.push({xx,yy});
            }
        }
        q.pop();
    }
}
int main(){
    f=1;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>arr[i][j];
        }
    }
    bfs();
    if(f) cout<<"No";
    return 0;
}

其实这题用广搜更简单


by 2023niuyanben @ 2023-08-10 16:52:05

写到这地步已经很牛逼了


|