另一个深度首先在java问题中搜索

时间:2013-03-07 06:39:04

标签: java depth-first-search

我想在java中实现深度优先搜索算法,以找到在二次矩阵中移动的最佳方法。我避免创建“不必要的”对象,即对象只是为了保持(X,Y)位置。

我忘记了什么吗?我运行它的起点为(0,0),目标是(4,5)。会发生什么是无限循环。

int x = this.move_to_x;
int y = this.move_to_y;

Stack X = new Stack();
Stack Y = new Stack();

Stack visited_X = new Stack();
Stack visited_Y = new Stack();

X.push(this.current_x);
Y.push(this.current_y);

while(!X.empty()){
    int tmp_x = (int)X.pop();
    int tmp_y = (int)Y.pop();

    if(tmp_x == x && tmp_y == y){
        System.out.println("best way found!");
        return;
    }

    //there is only 8 possible ways to go (the neighbors)
    for(int a = -1; a < 2; a++){
        for(int b = -1; b < 2; b++){
            if(a == 0 && b == 0){
                break;
            }

            if(visited_X.search(tmp_x + a) == -1 && visited_Y.search(tmp_y + b) == -1){
                X.push(tmp_x + a);
                Y.push(tmp_y + b);

                visited_X.push(tmp_x + a);
                visited_Y.push(tmp_y + b);

                System.out.println("added x " + tmp_x + a + " y " + tmp_y + b);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我可以看到几个问题:

1)以下内容:

        if(a == 0 && b == 0){
            break;
        }

您应该使用continue而不是break

2)以下内容:

if(visited_X.search(tmp_x + a) == -1 && visited_Y.search(tmp_y + b) == -1){

不正确:(tmp_x, tmp_y)对必须在visited_X/visited_Y中的同一索引中出现

3)您应该将起始位置添加到visited_{X,Y}

4)在算法上,我认为没有理由认为你的方法会返回最短的路径。

5)你的代码在(几乎)无限循环中结束的原因是你没有检查矩阵边界。