最短路径问题之广度优先算法BFS(C语言)

本文探讨了如何使用广度优先搜索(BFS)算法解决物流中心的单源最短路径问题,以及如何通过BFS求解每对顶点之间的最短路径。通过实例讲解了如何初始化访问标记数组和利用队列实现BFS过程,以及如何更新最短路径信息。
摘要由CSDN通过智能技术生成

一、单源最短路径

(一)最短路径问题

在这里插入图片描述

  • “G港”是个物流集散中⼼,经常需要往各个城市运东⻄,怎么运送距离最近?——单源最短路径问题
  • 各个城市之间也需要互相往来,相互之间怎么⾛距离最近?——每对顶点间的最短路径

(二)最短路径BFS算法(无权图)

在这里插入图片描述

bool visited[MAX_VERTEX_NUM];	//访问标记数组,👉初始都为false

//广度优先遍历
void BFS(Graph G, int v){	//从顶点v出发,广度优先遍历图G
	visit(v);	//访问初始顶点
	visited[v]=TRUE;	//对v做已访问标记
	Enqueue(Q,v);		//顶点v入队列Q
	while(!isEmpty(Q)){
		DeQueue(Q,v);	//顶点v出队列
		for(w=FirstNeighbor(G,v); w>=0; w=NextNeighbor(G,v,w)){
			//检测v所有邻接点
			if(!visited[w]){//w为v的尚未访问的邻接顶点
				visit(w);	//访问顶点w
				visited[w]=TRUE;//对w做已访问标记
				EnQueue(Q,w);//顶点w入队列
			}
		}
	}
}

1. 新增数组存储找到结点的顺序数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//求顶点u到其他顶点的最短路径
void BFS_MIN_Distance(Graph G, int u){
	//d[i]表示从u到i结点的最短路径
	for(i=0; i<G.vexnum; i++){
		d[i]=;	//初始化路径长度
		path[i]=-1;	//最短路径从那个顶点过来
	}
	d[u]=0;
	visited[u]=TRUE;
	EnQueue(Q,u);
	while(!isEmpty(Q)){//BFS算法主过程
		DeQueue(Q,u);	//队头元素u出队
		for(w=FirstNeighbor(G,u); w>=0; w=NextNeighbor(G,u,w)){
			if(!visited[w]){//w为u的尚未访问的邻接顶点
				d[w]=d[u]+1;//路径长度+1
				path[w]=u;//最短路径应从u到w
				visited[w]=TRUE;//设已访问标记
				EnQueue(Q,w);//顶点w入队
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值