技巧
BFS最短路
思路
实现
import java.io.*;
import java.util.LinkedList;
public class Main {
static class Pos {
char cheese;
int step, level, row, col;
public Pos(char cheese, int level, int row, int col) {
this.cheese = cheese;
this.level = level;
this.row = row;
this.col = col;
}
}
static boolean checkPos(int n, int... pos) {
for (int po : pos) {
if (po >= n || po < 0) {
return false;
}
}
return true;
}
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
int n = Integer.parseInt(br.readLine());
Pos[][][] cube = new Pos[n][n][n];
for (int level = 0; level < n; level++) {
for (int row = 0; row < n; row++) {
char[] chars = br.readLine().toCharArray();
for (int col = 0; col < n; col++) {
cube[level][row][col] = new Pos(chars[col], level, row, col);
}
}
}
int[][] direction = new int[][]{{1, 0, 0}, {-1, 0, 0}, {0, 0, 1}, {0, 0, -1}, {0, 1, 0}, {0, -1, 0}};
LinkedList<Pos> queue = new LinkedList<>();
queue.addLast(cube[0][0][0]);
int ans = -1;
out:
while (!queue.isEmpty()) {
Pos first = queue.removeFirst();
for (int[] d : direction) {
if (checkPos(n, first.level + d[0], first.row + d[1], first.col + d[2])) {
Pos target = cube[first.level + d[0]][first.row + d[1]][first.col + d[2]];
if (target.step == 0 && target.cheese != '*') {
target.step = first.step + 1;
if (first.level + d[0] == (n - 1) && first.row + d[1] == (n - 1) && first.col + d[2] == (n - 1)) {
ans = target.step + 1;
break out;
}
queue.addLast(target);
}
}
}
}
System.out.println(ans);
}
}

京公网安备 11010502036488号