我正在尝试实现一个版本的洪水填充算法,以帮助解决微型鼠标迷宫的最短距离路径。它的工作方式与常规洪水填充相同,只是每个相邻的未填充位置都将分配一个数字,表示该位置到起始位置的距离。每次算法移动到不同的单元格时,数字都会增加一。这是一个从左下角开始的没有墙的迷宫示例。
2 3 4
1 2 3
0 1 2
这是我当前的代码...
void nav_flood_rec(struct nav_array *array, int row, int column, int flood_num)
{
//Check the base case (not shown here)
if (base_case)
return;
//Assign the flood number
arrray->cells[row][column]->flood_number = flood_num;
//North
nav_flood_rec(array, row + 1, column, flood_num + 1);
//East
nav_flood_rec(array, row, column + 1, flood_num + 1);
//South
nav_flood_rec(array, row - 1, column, flood_num + 1);
//West
nav_flood_rec(array, row, column - 1, flood_num + 1);
}
我遇到的问题是递归不是一次一步进行(有点模糊,但让我解释一下)。而不是检查所有方向然后继续算法将继续向北移动而不检查其他方向。似乎我想让其他递归调用以某种方式产生,直到检查其他方向。有没有人有什么建议?