一个矩阵,1为路,0为障碍,2为终点,4为查找的路。
定义一个二维数组保存地图
int[,] gPath = new int[6, 6]{
{0 , 0, 0, 0, 1, 1},
{1, 1, 0, 0, 1, 0},
{0 , 1, 1, 1, 1, 0},
{0 , 0, 1, 0, 1, 2},
{0 , 0, 1, 0, 1, 0},
{0 , 0, 1, 1, 1, 0}
};
定义一个二维数组记录走过的路
int[,] gValue = new int[6,6];
条件筛选
int check_pos_valid(int x, int y)
{
/* 节点是否出边界 */
if (x < 0 || x >= 6 || y < 0 || y >= 6)
return 0;
/* 当前节点是否存在路 */
if (0 == gPath[x,y])
return 0;
/* 当前节点是否已经走过 */
if (4 == gValue[x, y])
return 0;
return 1;
}
递归寻路
int find_path(int x, int y)
{
if (check_pos_valid(x, y) == 1)
{
if (2 == gPath[x, y])
{
gValue[x, y] = 4;
return 1;
}
gValue[x, y] = 4;
if (find_path(x, y - 1) == 1)
return 1;
if (find_path(x - 1, y) == 1)
return 1;
if (find_path(x, y + 1) == 1)
return 1;
if (find_path(x + 1, y) == 1)
return 1;
gValue[x, y] = 0;
return 0;
}
return 0;
}
本文详细介绍了一种基于递归的迷宫寻路算法。通过定义一个二维数组表示迷宫地图,1代表路径,0代表障碍,2代表终点,4标记已搜索路径。算法首先检查当前位置的有效性,然后递归地尝试四个方向的路径,直到找到终点。
1万+

被折叠的 条评论
为什么被折叠?



