我是复制了三块原矩阵。开始时复制了四个,一个方向一个,过了样例但四十分。后来调来调去,判断能否脱出的条件也换了又换,终于……
1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<vector> 7 #include<cstdio> 8 #include<stack> 9 #include<queue> 10 #include<cmath> 11 #include<map> 12 #include<set> 13 using namespace std; 14 const int N=3012,ax[]={1,-1,0,0},ay[]={0,0,1,-1}; 15 struct node{int x,y;}; 16 int n,m,sx,sy; 17 bool gr[N][N],res; 18 void dfs(int x,int y){ 19 if(res)return; 20 if(x<0||y<0||x>2*n||y>2*m)return; 21 if(gr[x][y]&&!(x==sx&&y==sy))return; 22 if((x%n)==(sx%n)&&(y%m)==(sy%m)&&!(x==sx&&y==sy)){ 23 res=true; 24 gr[x][y]=true; 25 return; 26 } 27 gr[x][y]=true; 28 if(gr[(x+1+2*n)%(2*n)][y]==0)dfs((x+1+2*n)%(2*n),y); 29 if(gr[(x-1+2*n)%(2*n)][y]==0)dfs((x-1+2*n)%(2*n),y); 30 if(gr[x][(y-1+2*m)%(2*m)]==0)dfs(x,(y-1+2*m)%(2*m)); 31 if(gr[x][(y+1+2*m)%(2*m)]==0)dfs(x,(y+1+2*m)%(2*m)); 32 } 33 int main(){ 34 while(cin>>n>>m){ 35 sx=1,sy=1; 36 res=false; 37 memset(gr,0,sizeof gr); 38 string s[N]; 39 for(int i=0;i<n;i++)cin>>s[i]; 40 for(int i=0;i<n;i++) 41 for(int j=0;j<m;j++){ 42 if(s[i][j]==‘#‘)gr[i][j]=true; 43 else if(s[i][j]==‘S‘)sx=i,sy=j; 44 } 45 for(int i=0;i<n;i++) 46 for(int j=0;j<m;j++) 47 gr[i+n][j]=gr[i][j+m]=gr[i+n][j+m]=gr[i][j]; 48 gr[sx][sy]=true; 49 dfs(sx,sy); 50 cout<<(res?"Yes":"No")<<endl; 51 } 52 return 0; 53 }
Method_01
洛谷 Yukikaze 988ms
时间: 2024-11-20 15:04:43