RE 求助
查看原帖
RE 求助
662425
Ivan422楼主2024/2/27 18:37
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e7+100;
int h,w,sx,sy,cnt;
int to(int x,int y){return(x-1)*w+y;}
char a[N];int fs[N];int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void dfs(int x,int y){
    for(int i=0;i<4;i++){
        int nx=x+dx[i],ny=y+dy[i];
        if(nx<1||ny<1||nx>h||ny>w||fs[to(nx,ny)]!=0||a[to(nx,ny)]!='.')continue;
        fs[to(nx,ny)]=cnt;
        dfs(nx,ny);
    }
    return;
}
signed main(){
    cin>>h>>w;
    for(int i=1;i<=h;i++){
        for(int j=1;j<=w;j++){
            cin>>a[to(i,j)];
            if(a[to(i,j)]=='S')sx=i,sy=j;
        }
    }
    for(int i=1;i<=h;i++){
        for(int j=1;j<=w;j++)if(a[to(i,j)]=='.'&&fs[to(i,j)]==0){
            fs[to(i,j)]=++cnt;
            dfs(i,j);
        }
    }
    if(fs[to(sx+1,sy)]==fs[to(sx-1,sy)]&&sx>1&&sx<h&&a[to(sx+1,sy)]!='#'&&a[to(sx-1,sy)]!='#'){cout<<"Yes";}
    else if(fs[to(sx+1,sy)]==fs[to(sx,sy+1)]&&sy<w&&sx<h&&a[to(sx+1,sy)]!='#'&&a[to(sx,sy+1)]!='#'){cout<<"Yes";}
    else if(fs[to(sx+1,sy)]==fs[to(sx,sy-1)]&&sy>1&&sx<h&&a[to(sx+1,sy)]!='#'&&a[to(sx,sy-1)]!='#'){cout<<"Yes";}
    else if(fs[to(sx-1,sy)]==fs[to(sx,sy+1)]&&sx>1&&sy<w&&a[to(sx-1,sy)]!='#'&&a[to(sx,sy+1)]!='#'){cout<<"Yes";}
    else if(fs[to(sx-1,sy)]==fs[to(sx,sy-1)]&&sx>1&&sx>1&&a[to(sx-1,sy)]!='#'&&a[to(sx,sy-1)]!='#'){cout<<"Yes";}
    else if(fs[to(sx,sy-1)]==fs[to(sx,sy+1)]&&sy<w&&sy>1&&a[to(sx,sy)]!='#'&&a[to(sx,sy+1)]!='#'){cout<<"Yes";}
    else cout<<"No";
    return 0;
}

直接深搜的,有 22 个点RE了求助

2024/2/27 18:37
加载中...