迷宫算法路径查找器

时间:2014-10-08 12:38:20

标签: c# algorithm graph-algorithm

我试图找到一个迷宫的路径,下面是代码,它假设进入recursiveSolve循环但它继续退出,如果条件我在这里做错了可以有人帮我吗? 默认情况下,我将Washere和correctpath数组设置为false。

recursiveSolve(0, 0);

public static int[,] maze = {{0, 0, 0, 0, 0, 1},
                             {1, 1, 0, 0, 0, 1},
                             {0, 0, 0, 1, 0, 0},
                             {0, 1, 1, 0, 0, 1},
                             {0, 1, 0, 0, 1, 0},
                             {0, 1, 0, 0, 0, 1}};

public static Boolean recursiveSolve(int row, int col) {
    Boolean[,] wasHere = new Boolean[6, 6];
    Boolean[,] correctPath = new Boolean[6, 6]; // The solution to the maze

    if (maze[row, col] == 1 || wasHere[row, col]) {
        return false;
    }
    else if (row == 0 || row == 6 - 1 || col == 0 || col ==6 - 1) {
        correctPath[row, col] = true;
        return true;
    }
    else {
        wasHere[row, col] = true;
        if (recursiveSolve(row - 1, col) || recursiveSolve(row + 1, col) ||
                                            recursiveSolve(row, col - 1) || 
                                            recursiveSolve(row, col +1)) {
            correctPath[row, col] = true;
            return true; // successfully escaped; this square is on path
        }
        else {
            return false;
        }
    }
} 

2 个答案:

答案 0 :(得分:1)

你的wasHere和correctPath数组是recursiveSolve函数的本地数组,这意味着每次进入这个函数时,数组都将被引入false(或随机值)。

首先尝试使这些数组也是静态的,看看是否能解决你的问题总是假的。

此外,你应该从迷宫内的某个地方而不是边缘开始搜索(0,0表示你已经退出迷宫)。 如果您想从0,0开始,请将其标记为起点,并且不要将其作为有效的解决方案。

答案 1 :(得分:0)

如果您实际上正在进行寻路,并且这不是需要此特定解决方案的练习,那么您可能还需要查看可能更高效且更健壮的A *算法。

Wikipedia