面试时遇到Dijkstra算法,这个算法我是知道的,但是没具体写过,所以答题比较慢,抽时间实现了下这个算法。
Dijkstra算法基本思路:
该算法的基本思路是这样的,从起始点开始,将未访问过的相邻节点加入一个优先队列,类似于广度优先算法,然后从该队列中取出节点考虑:
对于单个节点,找出其所有相邻边,对于其邻接节点,计算总长度,如果该邻接节点的长度大于从该节点的长度,则更新路径为该节点。
具体代码如下:
package src.arithmetic;
import java.util.*;
import java.util.Map.Entry;
/**
* Dijkstra算法
*/
public class Dijkstra
{
public static class Node
{
public int nodeId;//节点标识
public List<Edge> adjEdge;//相邻边边
public Node(int nodeId, List<Edge> adjEdge) {
this.nodeId = nodeId;
this.adjEdge = adjEdge;
}
}
/**
* 发出边
*/
public static class Edge
{
public int endNode;//终止节点
public int weigth;//边的权重
public Edge(int endNode,int weigth)
{
this.endNod