rt,代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,m,vis[31][31][31][31];
int dx[5]={0,1,-1,0,0};//Right Left Down Up
int dy[5]={0,0,0,1,-1};
char ch[31][31];
bool dfs(int y,int x,int me,int d)
{
x=(x+m)%m;
y=(y+n)%n;
if(vis[y][x][me][d])
return false;
vis[y][x][me][d]=1;
if(ch[x][y]=='<')
d=2;
else if(ch[y][x]=='>')
d=1;
else if(ch[y][x]=='^')
d=4;
else if(ch[y][x]=='v')
d=3;
else if(ch[y][x]=='_')
if(me==0)
d=1;
else
d=2;
else if(ch[y][x]=='|')
if(me==0)
d=3;
else
d=4;
else if(ch[y][x]=='?')
for(int i=1;i<=3;i++)
if(dfs(y+dy[i],x+dx[i],me,i))
return 1;
else if(ch[y][x]=='.')
continue;
else if(ch[y][x]=='@')
return 1;
else if(ch[y][x]=='+')
me=(me+1)%16;
else if(ch[y][x]=='-')
me=(me+15)%16;
else
me=ch[y][x]-48;
}
int main()
{
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>ch[i][j];
if(dfs(0,0,0,1))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}