#include <bits/stdc++.h>
using namespace std;
int m,n,sx,sy,flag;
struct point{
int x,y;
};
char grid[1510][1510];
int dx[]={-1,0,0,1},dy[]={0,-1,1,0};
int vis[1510][1510];
point vis2[1510][1510];
void dfs(int modx,int mody,int x,int y){
if(flag) return;
if(vis[modx][mody] && (vis2[modx][mody].x!=x || vis2[modx][mody].y!=y)){
flag=1;
return;
}
vis[modx][mody]=1;
vis2[modx][mody].x=x;
vis2[modx][mody].y=y;
for(int k=0;k<4;++k){
int newmodx=(modx+dx[k]+m)%m,newmody=(mody+dy[k]+n)%n;
int newx=x+dx[k],newy=y+dy[k];
if(grid[newmodx][newmody]!='#'){
if(!vis[newmodx][newmody] || vis2[newmodx][newmody].x!=newx || vis2[newmodx][newmody].y!=newy)
dfs(newmodx,newmody,newx,newy);
}
}
}
int main() {
//freopen("a.in","r",stdin);
//freopen("b.in","w",stdout);
while(cin>>m>>n){
memset(vis,0,sizeof vis);
memset(vis2,0,sizeof vis2);
flag=0;
for(int i=0;i<m;++i)
cin>>grid[i];
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(grid[i][j]!='S')
sx=i,sy=j;
}
}
dfs(sx,sy,sx,sy);
if(flag) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
错误数据:
12 12
######.#.#.#
######.#...#
.......####.
######.####.
............
############
.....#...S..
####.#.#####
.....#......
############
.........#..
########.#.#
NO