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;
}

最新文章

  1. 企业办公3D指纹考勤系统解决方案(一)
  2. LaTeX Software &amp; Manuals
  3. WS调用的时候报错
  4. C++混合编程之idlcpp教程Lua篇(3)
  5. [kuangbin带你飞]专题十二 基础DP1
  6. 内存泄漏检测工具Valgrind
  7. python类型转换、数值操作(转)
  8. PHP读取文件内容的三种方式
  9. OpenLayers 添加OpenStreetMap(OSM)瓦片层示例
  10. sed命令基础
  11. centOS7上编译hadoop-2.7.7
  12. 本机mysql 5.7服务启动后停止,某些服务在未有其他应用程序使用时停止
  13. asp.net验证码
  14. docker下搭建fastfds集群版
  15. jedis 连接 redis:Could not get a resource from the pool——我的出错原因和解决办法
  16. Matlab绘图——对称曲线绘制(转)
  17. ZOJ 3203 Light Bulb (三分查找)
  18. Fiddler2 java代码拦截设置
  19. OpenCV的配置
  20. hadoop之安全篇

热门文章

  1. 控制台之console
  2. this 显示绑定
  3. socket 客户端和服务端通信
  4. git提交代码报错 trailing whitespace的解决方法
  5. Python之装饰器、迭代器和生成器
  6. (一)环境安装之Java
  7. js录制视频并保存
  8. js把数据处理成钱的格式
  9. 亲测,很有效的忽略SSL证书方法
  10. Jquery系列:checkbox 获取值、选中、设置值、事件监听等操作