在C中找到一条通过物理迷宫的路径

在C中找到一条通过物理迷宫的路径,c,arrays,maze,C,Arrays,Maze,因此,我们有一个机器人,它可以穿过迷宫(我不需要担心),写下检测到的墙壁和道路,并将其发送给另一个机器人,该机器人将直接穿过迷宫到达出口。 我已经编写了一个zigbee程序来发送迷宫(二维阵列),我想它应该可以工作(因为我家里只有一个机器人,所以还不能测试它)。 所以我的机器人得到了二维阵列。 例如: 1011 1011 101 101 1101 1010101 1010101 101 101 1101 标志一堵墙和一条路(必须是两个相邻的,因为一个数字等于10cm/3,9英寸)。 现在我真的不

因此,我们有一个机器人,它可以穿过迷宫(我不需要担心),写下检测到的墙壁和道路,并将其发送给另一个机器人,该机器人将直接穿过迷宫到达出口。
我已经编写了一个zigbee程序来发送迷宫(二维阵列),我想它应该可以工作(因为我家里只有一个机器人,所以还不能测试它)。
所以我的机器人得到了二维阵列。 例如:

1011
1011
101
101
1101
1010101
1010101
101
101
1101

标志一堵墙和一条路(必须是两个相邻的,因为一个数字等于10cm/3,9英寸)。
现在我真的不知道如何让我的机器人走上正确的道路。

如果迷宫没有循环,那么它的所有墙壁在入口和出口之间形成两条平行(尽管扭曲)线。只要始终遵循其中一条(例如,始终向右走,沿着自由空间的边缘行走)。当然,这不是最佳路径,但实现起来非常简单

如果有周期,你就不会那么容易了。你可以在维基百科上读到一些。@nneoneo建议的一个选项是使用Dijkstra算法,该“图”将所有n^2个迷宫正方形作为节点,并在两个相邻的空(
0
)节点之间创建边。它的内存有点大,但是它的性能不是很差,也不是很复杂


更有趣的阅读:在迷宫中查找希腊神话忒修斯。他用一团纱线追踪他的路线

如果迷宫没有循环,那么它的所有墙壁在入口和出口之间形成两条平行(尽管扭曲)线。只要始终遵循其中一条(例如,始终向右走,沿着自由空间的边缘行走)。当然,这不是最佳路径,但实现起来非常简单

如果有周期,你就不会那么容易了。你可以在维基百科上读到一些。@nneoneo建议的一个选项是使用Dijkstra算法,该“图”将所有n^2个迷宫正方形作为节点,并在两个相邻的空(
0
)节点之间创建边。它的内存有点大,但是它的性能不是很差,也不是很复杂


更有趣的阅读:在迷宫中查找希腊神话忒修斯。他用一团纱线追踪他的路线

你想要一个路径算法-也许是Dijkstra的算法?你想要一个路径算法-也许是Dijkstra的算法?是的,第一个机器人就是这样穿过它的(呆在左边的墙上)。但是我的机器人(第二个)在开始驾驶之前会计算出正确的路径。@Schurke:在任何给定的时间,你的机器人知道什么?如果它有迷宫的完整地图,那么它不需要“开始驾驶”——它可以假装开始驾驶,使用“左墙”方法,找出完整的正确路径,然后走。它知道第一个机器人驾驶的整个迷宫。但我仍然不知道如何为它编写函数。例如:如果(迷宫[9][9]&&[9][8]==0),那么会发生什么?我真的不知道“开始驾驶”意味着打印驾驶说明或将其发送到某个地方,对吗?好吧,别那么做。让你的程序和第一个机器人一样运行,但是把指令留给你自己。只有当你找到一条路的时候,才发布它们。“开始开车”的意思就是开始开车。这是一个有4个轮子的机器人,通过xbee可以得到迷宫的地图。我不能像第一个机器人那样做,因为第一个机器人只是检查它是否在墙上(距离传感器),如果不在,它就向左拐。但是第二个机器人需要知道从一开始哪条路是正确的,这样它就不会变成死胡同。是的,第一个机器人就是这样穿过它的(停留在左边的墙上)。但是我的机器人(第二个)在开始驾驶之前会计算出正确的路径。@Schurke:在任何给定的时间,你的机器人知道什么?如果它有迷宫的完整地图,那么它不需要“开始驾驶”——它可以假装开始驾驶,使用“左墙”方法,找出完整的正确路径,然后走。它知道第一个机器人驾驶的整个迷宫。但我仍然不知道如何为它编写函数。例如:如果(迷宫[9][9]&&[9][8]==0),那么会发生什么?我真的不知道“开始驾驶”意味着打印驾驶说明或将其发送到某个地方,对吗?好吧,别那么做。让你的程序和第一个机器人一样运行,但是把指令留给你自己。只有当你找到一条路的时候,才发布它们。“开始开车”的意思就是开始开车。这是一个有4个轮子的机器人,通过xbee可以得到迷宫的地图。我不能像第一个机器人那样做,因为第一个机器人只是检查它是否在墙上(距离传感器),如果不在,它就向左拐。但是第二个机器人需要从一开始就知道哪条路径是正确的,这样它就不会进入死胡同。