1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include<bits/stdc++.h> #define N 1600 #define INF 99999999 #define md(a,b) (((a)%b+b)%b) #define fsb(a,b,c) for(int a=b;a<=c;a++) #define fbs(a,b,c) for(int a=b;a>=c;a--) using namespace std; int sx,sy,n,m,a[N][N],flag; const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; struct node{ int x,y; }vis[N][N]; char s[N]; inline void dfs(int x,int y,int xx,int yy){
if(vis[xx][yy].x<INF){ if(vis[xx][yy].x!=x||vis[xx][yy].y!=y)flag=1; return; } vis[xx][yy]=(node){x,y}; fsb(i,0,3) if(a[md(x+dx[i],n)][md(y+dy[i],m)]==1){ dfs(x+dx[i],y+dy[i],md(x+dx[i],n),md(y+dy[i],m)); if(flag==1)return; } } int main(){ while(~scanf("%d%d",&n,&m)){ fsb(i,0,n-1){ scanf("%s",s); fsb(j,0,m-1){ a[i][j]=s[j]=='#'?0:1; if(s[j]=='S')sx=i,sy=j; } }
memset(vis,127,sizeof(vis));flag=0; dfs(sx,sy,sx,sy); puts(flag==1?"Yes":"No"); } return 0; }
|