在C中寻找迷宫中的最小路径

时间:2016-12-10 17:31:59

标签: c recursion maze

所以我需要创建一个代码来查找迷宫中最小路径的长度。

迷宫是NxN矩阵,起点是(0,0),终点是(N,N),如果单元格包含1,我可以通过它,如果它是0我不能。迷宫可能有也可能没有解决方案。

这是我的代码到目前为止,假设它有一个解决方案:

int path_finder(int maze[][N], int n, int row, int col)    // n equal N
{
int i, j, pth;

if (row == n-1 && col == n-1)    // Return 0 if I get to goal
  return 0;

if (col < 0 || row < 0 || row > n-1 || col > n-1)    // Same
  return n*n;

if (maze[row][col] == 0)    // Return big number to make sure it doesn't count
  return n*n;

maze[row][col] = 0;

pth = min( 1+path_finder(maze,n, row+1, col),    // Assume I already know the path
            1+path_finder(maze,n, row-1, col),    // from the next starting point
            1+path_finder(maze,n, row, col+1),    // just add 1 to it
            1+path_finder(maze,n, row, col-1)  );

maze[row][col] = 1;

return pth;
}

我总是得到N ^ 2 + 1,我认为它只计算我发送给min函数的最后一个参数,但我不知道如何修复它?

1 个答案:

答案 0 :(得分:1)

如果问题可行,请使用A *。

https://github.com/MalcolmMcLean/binaryimagelibrary/blob/master/astar.c

如果问题是设计的,那么就会有近乎理想的干扰路径。修改函数以取出启发式,并进行详尽的搜索。