• 洛谷1363——幻想迷宫(搜索)


    传送门

    最近真的是越来越菜了

    真的什么都做不起了

    连搜索都不会了

    可以把整个平面想象成很多张原始的图拼起来

    因为可以在不同的图里面走

    走到不同的图就相当于一个取模操作

    而如果在不同的图中走到了同一个位置

    那么也就是说可以这样无线走下去

    所以我们给vis数组开三维

    分别记录visit、原始(未取模)的x坐标、原始的y坐标

    如果搜索到了一个已经vis过的点

    而且不是同一个图的话

    说明可以无线走下去了

    // luogu-judger-enable-o2
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    inline int read(){
        char ch=getchar();
        int res=0;
        while(!isdigit(ch))ch=getchar();
        while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
        return res;
    }
    char x;
    int n,m,kx,ky;
    int vis[1505][1505][3];
    char ch[1505][1505];
    bool f;
    const int fx[5]={0,-1,0,1,0};
    const int fy[5]={0,0,1,0,-1};
    char y;
    inline int nxtx(int x,int k){
        if(x+fx[k]>n){
            return x+fx[k]-n;
        }
        if(x+fx[k]<=0){
            return x+fx[k]+n;
        }
        return x+fx[k];
    }
    inline int nxty(int y,int k){
        if(y+fy[k]>m){
            return y+fy[k]-m;
        }
        if(y+fy[k]<=0){
            return y+fy[k]+m;
        }
        return y+fy[k];
    }
    void dfs(int ax,int ay,int px,int py){
        if(f)return;
        if(vis[ax][ay][0]&&(vis[ax][ay][1]!=px||vis[ax][ay][2]!=py)){
            f=1;return;
        }
        vis[ax][ay][0]=1;vis[ax][ay][1]=px,vis[ax][ay][2]=py;
        for(int i=1;i<=4;i++){
            int gx=nxtx(ax,i),gy=nxty(ay,i);
            int lx=px+fx[i],ly=py+fy[i];
            if(ch[gx][gy]!='#'){
                if(!vis[gx][gy][0]||vis[gx][gy][1]!=lx||vis[gx][gy][2]!=ly)
                dfs(gx,gy,lx,ly);
            }
        }
    }
    int main(){
        int T=read();
        while(T--)
        {
            f=false;
            n=read(),m=read();
            memset(vis,false,sizeof(vis));
            for(int i=1;i<=n;i++){
                scanf("%s",ch[i]+1) ;         
                for(int j=1;j<=m;j++){
                    if(ch[i][j]=='S')kx=i,ky=j;
                }
            }
            dfs(kx,ky,kx,ky);
            if(f)cout<<"Yes"<<'
    ';
            else cout<<"No"<<'
    ';
        }
    }
    
  • 相关阅读:
    ioctl()函数详解
    傻孩子菜单框架
    高级套接口-(sendmsg和recvmsg)
    Linux内核Socket CAN中文文档
    第二节 信息系统服务管理
    第一节 信息化知识
    关系数据库标准语言SQL——概述
    SQL分组函数
    如何将web项目部署到weblogic
    范式
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366445.html
Copyright © 2020-2023  润新知