解题思路:
注意事项:
参考代码:
import java.util.Scanner;
public class Main {
static String[] dir = {"U","R","D","L"};
static int[] xincress = {-1,0,1,0};//方向递增数组和上面的 方向数组对应
static int[] yincress = {0,1,0,-1};
static int dirIndex;//方向数组的坐标 记录当前朝向
static int x;
static int y;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();//行
int n = sc.nextInt();//列
int[][] map = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = sc.nextInt();
}
}
x = sc.nextInt();//蚂蚁位置
y = sc.nextInt();
String towards = sc.next();//蚂蚁的朝向
int stepCount = sc.nextInt();//蚂蚁前进步数
for (int i = 0; i < 4; i++) {
if (dir[i].compareTo(towards) == 0) {
dirIndex = i;
break;
}
}
for (int i = 0; i < stepCount; i++) {
precede(map);
}
System.out.print(x +" ");
System.out.println(y);
}
//蚂蚁前进方法
public static void precede(int[][] map) {
//当前在黑格
if(map[x][y] == 1) {
map[x][y] = 0;//变为白格
dirIndex = (dirIndex + 1) % 4;
// System.out.print(dirIndex + " ");
x = x + xincress[dirIndex];
y = y + yincress[dirIndex];
// System.out.println("向右往前一步 当前在" + x + " ---" + y);
return;
}
//当前在白格
if(map[x][y] == 0) {
map[x][y] = 1;//变为黑格
dirIndex = (dirIndex - 1 + 4) % 4;//避免越界 保证是最小正数
// System.out.print(dirIndex + " ");
x = x + xincress[dirIndex];
y = y + yincress[dirIndex];
// System.out.println("向左往前一步 当前在" + x + " ---" + y);
return;
}
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复