目录
一、前言
前一篇文章我们详细讲了BFS的原理及实现,在使用BFS遍历图的过程中,我们可以对每个顶点进行标记,标记当前顶点距离源头顶点的距离。这个距离我们用int d[i]来存储,由于BFS的性质,d[i]中存放的就是源头顶点v到顶点i的最短路径。
二、BFS求某个顶点到其他顶点的最短路径
bool visited[MAX_VERTICES]; //用于标记顶点是否被访问过,访问过为true
queue<int> q; //C++STL中的队列,创建一个辅助队列
int d[MAX_VERTICES]; //d[i]表示从顶点v到顶点i的最短路径
void BFS_MIN_Distance(Graph graph,int v) {
//d[i]表示从顶点v到顶点i的最短路径
for (int i = 0; i < graph.num_vertices; i++) {
d[i] = INT_MAX; //初始化路径长度为无穷大
}
visited[v] = true; //标记为已访问
d[v] = 0; //顶点v到自身的距离为0
q.push(v); //入队
while (!q.empty()) { //当队列不为空时
int QueueHead = q.front(); //获取当前处于队头的顶点
q.pop(); //获取队头后然后再出队
Edge* p = FirstNeighbor(graph, QueueHead); //得到上面获取的队头的指向第一条边的指针
//这层循环将访问与QueueHead关联的所有顶点
while (p != NULL) { //p不为空说明QueueHead有关联的边
int w = p->adjVertex; //w是与v关联的顶点下标
if (!visited[w]) { //未访问
visited[w] = true; //标记为已访问