单源最短路径问题——BFS(广度优先搜索)算法

一、单源最短路径问题——BFS(广度优先搜索)算法:
  算法思想:
      若图是非带权图,定义从定点v到顶点w的最短路径d(v,w)为从u到v的任何路径的最少的变数;
      若u到v没有同路,则d(v,w)为无穷大。
      使用BFS,我们可以求解一个满足上述定义的非带权图的单源最短路径问题,这是由广度优先搜索总是按照距离由近到远来遍历图的每个顶点的性质决定的。
  辅助变量:
  d[i]:表示从v到i结点的最短路径
 
二、伪代码如下:
 1 void ShortestPath_BFS(MGraph G, int v){
 2     /*从这句开始对各数组进行初始化*/
 3     for(i = 0; i < G.vertex_num; ++i)
 4         d[i] = INF;//(INF是一个已经定义的比图中所有边权值都大的常量,表示∞)
 5     visited[v] = true;
 6     d[u] = 0;
 7     Enqueue(Q,u);
 8     /*初始化结束,开始BFS算法主过程*/
 9     while(!isEmpty(Q)){
10         Dequeue(Q,u);
11         for(w = FirstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w)){
12             //检测v所有邻接结点
13             if(!visited[w]){                //w尚未被访问
14                 visited[w] = true;          //对顶点w做访问标记
15                 d[w] = d[v] + 1;
16                 EnQueue(Q,w);               //顶点w入队
17             }//if
18         }//for
19     }//while
20 }//ShortestPath_BFS

 

三、算法性能分析:同光度优先搜索算法

posted @ 2021-11-28 17:17  某科学的撒把豆子  阅读(646)  评论(0)    收藏  举报