最短路径(dijist算法)

本文探讨了如何使用Dijkstra算法寻找图中一个顶点到其他所有顶点的最短路径。该算法基于贪心策略,每次选择当前未处理节点中距离源点最近的一个,更新其相邻节点的距离。
摘要由CSDN通过智能技术生成

单源最短路径,计算一个顶点到另一个顶点的最短路径

贪心思想,每次找距离最近的点,并且更新距离,更新公式:path[i]=min(path[i],path[index]+map[index][i])

long walk(vector<vector<long>>& map, long s, long t, int n){
	vector<long> path = map[s];//s到其他点的距离
	vector<bool> visit(n + 1, 0);

	long index = s;
	visit[s] = 1;
	long inf = numeric_limits<long>::max();
	while (index != t){//当没有到达目标点的时候
		//寻找距离s最近的点

		long m = inf;
		for (int i = 1; i < n + 1; ++i){
			if (m>path[i] && visit[i] == 0){
				m = path[i];
				index = i;
			}
		}
		visit[index] = 1;
		//更新s到其他点的距离
		for (int i = 1; i < n + 1; ++i){
			if (visit[i] == 0 && map[index][i] != inf){
				path[i] = min(path[i], path[index] + map[index][i]);
			}
		}
	}
	return path[t];

}
int main(){
	long n = 0;//顶点数目
	long m = 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值