执行深度优先搜索

时间:2017-06-30 07:31:03

标签: java

我在DFS上练习,但是我的代码在某些地方出错,我无法解决。这是我的代码:

public static <T> void doSearch(Dimension start, Dimension end, char[][] grid) {
    System.out.println(start);
    while (true) {
        if (checkEqual(start, end)) {
            break; // stop searching
        }
        getPossibleMoves(start, grid);
        doSearch(moves.pop(), end, grid);
    }
} // the end

在我的doSearch()方法中,我有“移动”堆栈来存储移动,possibleMoves()方法用于查找可以从“开始”进行的移动。但是当checkEqual()方法检查到我已经到达目标时,它会跳出while循环并且到达结尾但仍然返回到while循环,因此doSearch()方法永远不会停止。我在哪里弄错了?

1 个答案:

答案 0 :(得分:0)

该方法的逻辑是错误的。想象一下,在while循环的第一次迭代中,“checkEquals”返回“false”并且您获得可能的移动然后您在第一个可能的移动中搜索。在下一次迭代中,会发生同样的事情:“checkEqual”将返回false并且您将重新生成可能的移动,并且您将在第一个可能的移动中进行搜索!这将永远发生。