天天看点

迷宫求解之队列

#求迷宫路径的思路

1、找一条能从入口到出口的路径,可能一个迷宫中有多条,但是利用不同的算法找出来的路径可能不同

2、队列是一种_先进先出_的数据结构,但是,是用顺序队还是用链队来求解呢?当然是采用顺序队列,因为与链队比起来,实现的思路都是一样的,但顺序队利用的存储空间明显少很多。

3、队列寻路核心就是多路并行,谁先找到出口,就告诉其他人,以便结束寻路。这找出来的路显然是最优的路,也就是最短路径。

4、找出路后,还应有一个“回溯”的过程,以便输出这条最短路径。“回溯”就是对这条路径上的方块进行标记。

下面给出顺序队的头结点与数据结点的定义

//数据结点

typedef struct{

int x,y;//方块的横坐标x与纵坐标y

int pre;//一条路径中该方块的前一个方块的物理下标

}Box;

//头结点

typedef struct{

Box data[MAXSIZE]; data[MAXSIZE]为对中的数据结点的存储空间

int front,rear; //front为头指针,rear为尾指针

}

主要实现代码如下

迷宫求解之队列
迷宫求解之队列
迷宫求解之队列

总结:用队列找出来的迷宫路径是最短的,但当迷宫很大时,其耗费的时间也是相当长的,因为其要遍历大部分的方块,最坏的情况是只剩下一两个没有遍历。这时,如果考虑时间问题的话,建议采用栈来实现,虽然栈找出来的路径不一定是最短的,但其花费的时间可能会少很多。