问题

求两个顶点之间的一条【路径长度最短】的路径

例子

两点间最短距离(BFS) - 图1

用BFS,怎么得到【路径】:
改变队列的结构,入队列的顶点新增一个【域】(记录上一个顶点)
【路径】即一直往上找
【例子中】找到5,往上找,5->4->1->3
【实现】出队列的时候,不把结点删除掉,还保持链表,改变Q.front的指向就好了

  1. 将链队列的结点改为【双链】结点,即结点中包含【next和priou】两个指针
  2. 修改入队列的操作,插入新的队尾结点时,令其【priou】域的指针指向刚刚出队列的结点,即当前的队头指针所指结点
  3. 修改处队列的操作,出队列时,仅移动队头指针,而不将队头结点从链表中删除

算法

基于广度优先搜索遍历,并修改【链队列的结点结构】及其【入队列】和【出队列】的算法

  1. typedef DuLinkList QueuePtr;
  2. void InitQueue(LinkQueue &Q) {
  3. Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
  4. Q.front->next = Q.rear->next =NULL;
  5. }
  6. void EnQueue(LinkQueue &Q, QElemType e) {
  7. p = (QueuePtr)malloc(sizeof(QNode));
  8. p->data = e;
  9. p->next = NULL;
  10. p->priou = Q.front;
  11. Q.rear->next = p;
  12. Q.rear = p;
  13. }
  14. void DeQueue(LinkQueue &Q,QElemType &e) {
  15. Q.front = Q.front->next;
  16. e = Q.front->data;
  17. }