AcWing 3152. 兰顿蚂蚁(Java解法^ ^)
原题链接
简单
作者:
是晴天呀
,
2021-04-03 17:47:20
,
所有人可见
,
阅读 574
import java.util.Scanner;
public class Main {
static Scanner sc=new Scanner(System.in);
static int n=sc.nextInt();
static int m=sc.nextInt();
static int a[][]=new int[n][m];
static int x;
static int y;
static char s;
static int k;
static int dx[]=new int[] {-1,0,1,0};
static int dy[]=new int[] {0,1,0,-1};
static String ds="URDL"; //上右下左分别对应下标:0123,对应上面的数组dx和dy
public static void main(String[] args) {
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
a[i][j]=sc.nextInt();
}
}
sc.nextLine();
String srr[]=sc.nextLine().split(" ");
x=Integer.parseInt(srr[0]);
y=Integer.parseInt(srr[1]);
s=srr[2].charAt(0); //s表示当前方向
k=Integer.parseInt(srr[3]);
//注意注意,一定是在当前格子,先转向,转过之后再走!!
while(k>0) {
if(a[x][y]==0) { //白色 左转
a[x][y]=1;
int i=ds.indexOf(s); //当前位置
s=ds.charAt((i-1+4)%4); //转
int ii=ds.indexOf(s); //转过之后的朝向的下标
x=x+dx[ii]; //转过之后走
y=y+dy[ii];
k--;
}else if(a[x][y]==1) { //黑色 右转
a[x][y]=0;
int i=ds.indexOf(s); //当前位置
s=ds.charAt((i+1)%4); //转
int ii=ds.indexOf(s); //转过之后的朝向的下标
x=x+dx[ii]; //转过之后走
y=y+dy[ii];
k--;
}
}
System.out.println(x+" "+y);
}
}