寻找迷宫路径的成本
Finding a cost for a maze path
我有这个迷宫:
##++##############
##++++++++++++++##
########++########
##++++++++##----##
##++########--####
“#”符号是迷宫中的墙。
迷宫的“+”区域是从入口点可达的迷宫区域,“-”区域是从入口点无法到达的区域。入口点位于迷宫的顶部。
我现在想做的是绘制迷宫中可到达区域的成本,如下所示:
##00##############
##++02++04++06++##
########++########
##++08++06##----##
##10########--####
这表明迷宫从入口到出口的成本为10。
迷宫顶部存储在一个二维数组中,我使用递归来解决可达区域。如何使用我的递归函数标记路径成本,如下所示:
void
flood_fill(m_t * maze, int row, int col) {
// If row,col is outside maze
if ( row < 0 || row >= maze->height || col < 0 || col >= maze->width) return;
// If row,col is not open
if (maze->M[row][col].type != '.') return;
// Mark row,col as part of path.
maze->M[row][col].type = '+';
// Go LEFT
flood_fill(maze, row, col - 1);
// Go DOWN
flood_fill(maze, row + 1, col);
// Go RIGHT
flood_fill(maze, row, col + 1);
// Go UP
flood_fill(maze, row - 1, col);
return;
}
对于第一个迷宫,我在迷宫的顶部使用了这个递归函数,它用“+”填充了所有可到达的单元格。
是否有任何关于如何使用路径成本来做类似的事情的建议。我只是在寻找一些关于我如何去做的例子或建议。关于如何实现第二个迷宫示例的任何帮助都会有所帮助。
传递一个额外的参数,即到目前为止的路径成本。
flood_fill(m_t * maze, int row, int col, int cost)
每个迷宫位置都有一个额外的属性,.cost,您可以在填满迷宫时更新该属性。将成本初始化为 MAXINT 作为标记。
例如,
if (maze->M[row][col].cost > cost)
maze->M[row][col].cost = cost
// Go LEFT
flood_fill(maze, row, col - 1, cost+1);
// repeat for the other 3 directions
无论如何,您现在有了每个方格的成本。当你将迷宫转储到屏幕上时,根据需要显示。
我有这个迷宫:
##++##############
##++++++++++++++##
########++########
##++++++++##----##
##++########--####
“#”符号是迷宫中的墙。
迷宫的“+”区域是从入口点可达的迷宫区域,“-”区域是从入口点无法到达的区域。入口点位于迷宫的顶部。
我现在想做的是绘制迷宫中可到达区域的成本,如下所示:
##00##############
##++02++04++06++##
########++########
##++08++06##----##
##10########--####
这表明迷宫从入口到出口的成本为10。
迷宫顶部存储在一个二维数组中,我使用递归来解决可达区域。如何使用我的递归函数标记路径成本,如下所示:
void
flood_fill(m_t * maze, int row, int col) {
// If row,col is outside maze
if ( row < 0 || row >= maze->height || col < 0 || col >= maze->width) return;
// If row,col is not open
if (maze->M[row][col].type != '.') return;
// Mark row,col as part of path.
maze->M[row][col].type = '+';
// Go LEFT
flood_fill(maze, row, col - 1);
// Go DOWN
flood_fill(maze, row + 1, col);
// Go RIGHT
flood_fill(maze, row, col + 1);
// Go UP
flood_fill(maze, row - 1, col);
return;
}
对于第一个迷宫,我在迷宫的顶部使用了这个递归函数,它用“+”填充了所有可到达的单元格。
是否有任何关于如何使用路径成本来做类似的事情的建议。我只是在寻找一些关于我如何去做的例子或建议。关于如何实现第二个迷宫示例的任何帮助都会有所帮助。
传递一个额外的参数,即到目前为止的路径成本。
flood_fill(m_t * maze, int row, int col, int cost)
每个迷宫位置都有一个额外的属性,.cost,您可以在填满迷宫时更新该属性。将成本初始化为 MAXINT 作为标记。 例如,
if (maze->M[row][col].cost > cost)
maze->M[row][col].cost = cost
// Go LEFT
flood_fill(maze, row, col - 1, cost+1);
// repeat for the other 3 directions
无论如何,您现在有了每个方格的成本。当你将迷宫转储到屏幕上时,根据需要显示。