水题,直接dfs就行了。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <map>
#include <math.h>
#define LL long long
using namespace std;
const int maxn=1e2+10;
const int mod=1e9+7;
int a[maxn][maxn];
char way[6]="URDLU";
int black[4][2]={0,1,1,0,0,-1,-1,0};
int white[4][2]={0,-1,-1,0,0,1,1,0};
int m,n,k,sx,sy,step,ex,ey,f=0;
void dfs(int x,int y,char z,int cnt){//printf("%d %d %c %d\n",x,y,z,cnt);
if(f) return ;
if(cnt==step) {
ex=x,ey=y;f=1;
return ;
}
if(a[x][y]){
for(int i=0;i<4;++i){
if(z!=way[i]) continue;
a[x][y]=0;
dfs(x+black[i][0],y+black[i][1],way[i+1],cnt+1);
}
}else{
for(int i=0;i<4;++i){
if(z!=way[i]) continue;
a[x][y]=1;
if(z=='U') z='L';
else if(z=='L') z='D';
else if(z=='D') z='R';
else z='U';
dfs(x+white[i][0],y+white[i][1],z,cnt+1);
}
}
}
char dir;
int main(){
scanf("%d %d",&n,&m);
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
scanf("%d",&a[i][j]);
scanf("%d %d %c %d",&sx,&sy,&dir,&step);
dfs(sx,sy,dir,0);
printf("%d %d\n",ex,ey);
return 0;
}