单源无权最短路径问题

单源无权最短路径问题
由一个点到图中所有点的最短路径;

思路:使用BFS遍历,从给定的点开始,层次遍历;按照递增的顺序找出最短路径

在这里插入图片描述

使用一个dist数组存储距离;path数组存储路径;

void BFS(Graph G, int i) 
 //给定一个图,和图中的一个顶点,找出这个点到其它点的最短路径,和到其它点的路径
{
	linkQueue Q;  
	Adj W;
	int V;
	Q = createQueue();   // 建立空队列
	AddQ(Q, i); // 入队
	dist[i] = 0;  // 顶点到自身的距离为0;
	while (!Emptry(Q))
	{
		V = DelQ(Q);  // 出队
		for (W = G->G[V].FirstEdge; W; W = W->next)  // 使用邻接表存储图,遍历和顶点相连的其它点
		{
			if (dist[W->Adjv] == -1)  //判断点有没有访问过
			{
				dist[W->Adjv] = dist[V] + 1;  // 递推求出距离
				path[W->Adjv] = V; // 存储路径
				AddQ(Q, W->Adjv);  // 入队
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40540957/article/details/84108092
今日推荐