最短路径:地图软件是如何计算出最优出行路径的?

最短路径:地图软件是如何计算出最优出行路径的?

针对有权图,就是图中的每条边都有一个权重,如何计算两点之间的最短路径(经过的边的权重和最小)呢?从地图软件的路线规划问题,看看最短路径算法

算法剖析

最优问题有三个:最短路线、最少用时和最少红绿灯

最简单的是最短路线,解决软件开发中的实际问题,最重要的是建模,即将复杂的场景抽象成具体的数据结构,该如何抽象成数据结构呢?把地图抽象成图最合适不过了,把每个岔路口都看成一个顶点,岔路口和岔路口之间的路看做一条边,路的长度就是边的权重,如果路是单行道,就在两个顶点之间画一条有向边,如果路是双行道,就在两个顶点之间画两条方向不同的边,这样就可以抽象成一个有向有权图

即一个有向有权图中求两个顶点间的最短路径:

public class Graph{    //有向有权图的邻接表表示
	private LinkedList<Edge> adj[]; //邻接表
	private  int v;   //顶点个数
	
	public Graph(int v ){
		this.v = v;
		this.adj = new LinkedList[v];
		for(int i = 0 ; i < v ; ++i){
			this.adj[i] = new LinkedList<>();
		}
	}
	
	public void addEdge(int s , int  t , int w ){    //添加一条边
		this.adj[s].add( new Edge(s,t,w));
	}
	
	private class Edge{
		public
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值