单源无权最短路径问题
由一个点到图中所有点的最短路径;
思路:使用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); // 入队
}
}
}
}