【发布时间】:2016-11-13 08:13:55
【问题描述】:
这个问题是面试时问的。给定网格 4X4,假设点 (2,2)(从 0 开始的索引),您将给出一些任意点,从那里开始,打印一条任意路径,您可以从那里退出网格。您可以移动LEFT、RIGHT、TOP、BOTTON。在下面的网格中,1 - 代表块,0:你可以移动。
1 0 1 1
0 0 0 0
1 1 0 1
1 1 1 1
上述网格的退出路径是,(2, 2)=> (1, 2) => (1, 1) => (0, 1)
我试图通过 DFS 解决这个问题(下面),但我无法找到如何打印任何一个路径的解决方案,以下是打印所有路径,我只想打印任何路径。
public boolean isValidMove(Point point){
if(array[point.getX()][point.getY()]==0){
return true;
}
return false;
}
public void printTraversal(int [][] array, int M, int N, Point start){
boolean [] visited = boolean[M*N];
Arrays.fill(visited, false);
int index = start.getX()*M+ start.getY();
boolean[index] = true;
Stack<Point> stack = new Stack<Point>();
stack.push(start);
while(!stack.isEmpty()){
Point point = stack.pop();
System.out.println(point.getX()+", "+ point.getY());
int x = point.getX();
int y = point.getY();
if(isValidMove(x-1, y-1)){
stack.push(new Point(x-1, y-1));
}
if(isValidMove(x-1, y)){
stack.push(new Point(x-1, y));
}
if(isValidMove(x, y-1)){
stack.push(new Point(x, y-1));
}
if(isValidMove(x+1, y+1)){
stack.push(new Point(x+1, y+1));
}
}
}
class Point{
private int X;
private int Y;
public Point(int X, int Y){
this.X = X;
this.Y = Y;
}
public int getX(){
return this.X;
}
public int getY(){
return this.Y;
}
}
【问题讨论】:
-
请查看我的最新答案。我已经简化了。
标签: java algorithm graph depth-first-search