import java.util.*;
/**
* 题目大意:n*m格迷宫,1代表青蛙可以通过,0不能通过
* 青蛙体力值P,每次走一步,横向走消耗体力值1,向下走不消耗体力,
* 向上走消耗体力值3.
* 青蛙初始位置(0,0),迷宫出口(0,m-1)
* 求青蛙走出迷宫的路径
*/
public class Main {
static class Node {
int x;
int y;
int p;
Node(int x, int y,int p) {
this.x = x;
this.y = y;
this.p = p;
}
}
static int[][] dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
static int[] cost = {3,0,1,1};
static List<Node> path;
public static void main(String[] arg) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
path = new ArrayList<>();
int n = scan.nextInt();
int m = scan.nextInt();
int p = scan.nextInt();
int[][] matrix = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
matrix[i][j] = scan.nextInt();
}
}
boolean[][] isVisited = new boolean[n][m];
isVisited[0][0] = true;
path.add(new Node(0,0,p));
boolean hasPath = dfs(matrix,isVisited,0,0,p);
if (!hasPath) {
System.out.println("Can not escape!");
}else {
int size = path.size() - 1;
Node node;
for (int i = 0; i < size; i++) {
node = path.get(i);
System.out.print("[" + node.x + "," +node.y +"],");
}
node = path.get(size);
System.out.println("[" + node.x + "," +node.y +"]");
}
}
scan.close();
}
private static boolean dfs(int[][] matrix,boolean[][] isVisited,
int x, int y, int p) {
int n = matrix.length;
int m = matrix[0].length;
if (p <= 0 && x != 0 && y != m - 1) {
return false;
}
if (x == 0 && y == m - 1 && p >= 0) {
return true;
}
for (int i = 0; i < 4; i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (!isInside(n,m,nx,ny)) {
continue;
}
if (matrix[nx][ny] == 1 && !isVisited[nx][ny]) {
isVisited[nx][ny] = true;
// System.out.println("push nx="+nx+" ny="+ny+" p="+(p-cost[i]));
Node node = new Node(nx,ny,p-cost[i]);
path.add(node);
if (dfs(matrix,isVisited,nx,ny,p-cost[i])){
return true;
}
isVisited[nx][ny] = false;
// System.out.println("pop nx="+nx+" ny="+ny+" p="+(p-cost[i]));
path.remove(node);
}
}
return false;
}
private static boolean isInside(int n,int m,int x,int y) {
return x >= 0 && x < n && y >= 0 && y < m;
}
}
滴滴2017校园招聘笔试题
最新推荐文章于 2019-08-28 20:09:13 发布