面试遇到的一个有关问题
面试遇到的一个问题
题目是这样的,象棋中马走日,问马从象棋的左下角(原点)到棋盘中的(x,y)处的最短步数,棋盘长宽为m和n
------解决方案--------------------
写了一个队列广搜解法,因为没有样例输入输出所以也不知道对不对,但是我测试了一下比较小的数据,基本应该是正确的。
题目是这样的,象棋中马走日,问马从象棋的左下角(原点)到棋盘中的(x,y)处的最短步数,棋盘长宽为m和n
------解决方案--------------------
写了一个队列广搜解法,因为没有样例输入输出所以也不知道对不对,但是我测试了一下比较小的数据,基本应该是正确的。
public class Horse {
private static final int[][] jump = {{-2, 1}, {-2, -1}, {2, 1}, {2, -1},
{-1, 2}, {-1, -2}, {1, 2}, {1, -2}};
public static void main(String[] args) {
int m = 500, n = 800, x = 35, y = 109;
boolean[][] visited = new boolean[m][n];
int[][] queue = new int[m * n][3];
int h = 0, t = -1, i, j, i2, j2;
visited[0][0] = true;
while (t++ < h) {
i = queue[t][1];
j = queue[t][2];
if (i == x && j == y) {
System.out.println("Min: " + queue[t][0]);
break;
}
for (int a = 0; a < jump.length; a++) {
i2 = i + jump[a][0];
j2 = j + jump[a][1];
if (i2 >= 0 && i2 < m && j2 >= 0 && j2 < n && !visited[i2][j2]) {
h++;
visited[i2][j2] = true;
queue[h][0] = queue[t][0] + 1;
queue[h][1] = i2;
queue[h][2] = j2;
}
}
}
}
}