所以我需要创建一个代码来查找迷宫中最小路径的长度。
迷宫是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函数的最后一个参数,但我不知道如何修复它?
答案 0 :(得分:1)
如果问题可行,请使用A *。
https://github.com/MalcolmMcLean/binaryimagelibrary/blob/master/astar.c
如果问题是设计的,那么就会有近乎理想的干扰路径。修改函数以取出启发式,并进行详尽的搜索。