• 【洛谷P1363】幻象迷宫


    P1363 幻想迷宫

    显然,若从原图中起点走到相邻的图中对应的“起点”位置 ,就可以无限走下去,
    若一个点从原图中可以到达,到了非原图中也可以到达,就可以无限走下去
    我们不妨记录下当前到达的x,y坐标,同时也记录下在%n,%m下的坐标,
    int vis[x][y][3]; x,y表示在%n,%m下的坐标,vis[x][y][1]表示是否到达过x’%n=x,y’%n=y的x’,y’
    vis[x][y][1]记录x',vis[x][y][2]记录y',若第二次经过时实际坐标不同,则可以无限走下去

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define N 1520
    #define reset(a) memset(a,0,sizeof(a))
    int n,m,que[N*N*2][4],head,tail,vis[N][N][3];
    int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
    bool map[N][N],flag;
    int main(){
    	while(cin>>n){
    		cin>>m; flag=0;
    		reset(map); reset(vis);
    		head=tail=0;
    		char c=getchar();
    		for(int i=1;i<=n;i++){
    			while(c!='.'&&c!='#'&&c!='S')
    			c=getchar();
    			for(int j=1;j<=m;j++){
    				if(c=='S'){
    					map[i][j]=1;
    					vis[i][j][0]=1;
    					vis[i][j][1]=i;
    					vis[i][j][2]=j;
    					que[++tail][0]=i;
    					que[tail][1]=j;
    					que[tail][2]=i;
    					que[tail][3]=j;
    				}
    				else if(c=='.')
    				map[i][j]=1;
    				c=getchar();
    			}
    		}
    		while(head<tail){
    			int x1=que[++head][0];
    			int y1=que[head][1];
    			int x2=que[head][2];
    			int y2=que[head][3];
    			for(int i=1;i<=4;i++){
    				int nx2=x2+dx[i];
    				int ny2=y2+dy[i];
    				int nx1=(x1+dx[i]+n-1)%n+1;
    				int ny1=(y1+dy[i]+m-1)%m+1;
    				if(!map[nx1][ny1]) continue;
    				if(vis[nx1][ny1][0]){
    					if(vis[nx1][ny1][1]==nx2)
    					 if(vis[nx1][ny1][2]==ny2)
    					  continue;
    					{flag=1; break;}
    				}
    				if(flag) break;
    				vis[nx1][ny1][0]=1;
    				vis[nx1][ny1][1]=nx2;
    				vis[nx1][ny1][2]=ny2;
    				que[++tail][0]=nx1;
    				que[tail][1]=ny1;
    				que[tail][2]=nx2;
    				que[tail][3]=ny2;
    			}
    			if(flag) break;
    		}
    		if(flag) puts("Yes");
    		else puts("No");
    	}
    	return 0;
    }
    
  • 相关阅读:
    转:【译】CSS3:clip-path详解
    转---JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制
    转---30 分钟学会 Flex 布局
    转---单页面应用下的JS内存管理
    转---移动端 h5开发相关内容总结——CSS篇
    转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
    转---写一个网页进度loading
    转---内存空间详细图解
    转---前端跨域请求原理及实践
    简单记录常用git 命令
  • 原文地址:https://www.cnblogs.com/yjkhhh/p/9360440.html
Copyright © 2020-2023  润新知