写在前面:
我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。
——zsferrier@126.com
Dijkstra算法是贪心算法最好的例子,贪婪算法一般分阶段求解一个问题,在每个阶段它都把出现的当作最好的去处理。
首先给出数据类型
//节点所存储的数据域
class Vertex{
public List<Integer> adjacency;//邻接表
public boolean known; //标记
public int dist; //距离出发点的距离
public Vertex path;//路径
public int vname;//节点编号
public Vertex(){
known = false;
dist = MaxLen;
path = null;
}
}
邻接表存储与该节点邻接所有节点的边信息,不直接相邻的节点距离为MaxLen(预定义,MaxLen=1000表示不距离不可达)
known标记节点是否已知。
dist为此节点当前距离原点的距离MaxLen表示不可达。
path记录路径上的上一个节点。
vname为节点编号。
dijkstra分阶段求解,在每个阶段,选择一个节点v,它在