主页 > 知识库 > 网络编程 > JSP/Java >

JAVA编程语言程序开发技术Dijkstra

来源:中国IT实验室 作者:佚名 发表于:2013-02-05 16:53  点击:
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
  Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式
  用OPEN,CLOSE表的方式,其采用的是贪心法的算法策略,大概过程如下:
  1.声明两个集合,open和close,open用于存储未遍历的节点,close用来存储已遍历的节点
  2.初始阶段,将初始节点放入close,其他所有节点放入open
  3.以初始节点为中心向外一层层遍历,获取离指定节点最近的子节点放入close并从新计算路径,直至close包含所有子节点
  代码实例如下:
  Node对象用于封装节点信息,包括名字和子节点
  [java]
  public class Node {
  private String name;
  private Map<Node,Integer> child=new HashMap<Node,Integer>();
  public Node(String name){
  this.name=name;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public Map<Node, Integer> getChild() {
  return child;
  }
  public void setChild(Map<Node, Integer> child) {
  this.child = child;
  }
  }
  MapBuilder用于初始化数据源,返回图的起始节点
  [java]
  public class MapBuilder {
  public Node build(Set<Node> open, Set<Node> close){
  Node nodeA=new Node("A");
  Node nodeB=new Node("B");
  Node nodeC=new Node("C");
  Node nodeD=new Node("D");
  Node nodeE=new Node("E");
  Node nodeF=new Node("F");
  Node nodeG=new Node("G");
  Node nodeH=new Node("H");
  nodeA.getChild()。put(nodeB, 1);
  nodeA.getChild()。put(nodeC, 1);
  nodeA.getChild()。put(nodeD, 4);
  nodeA.getChild()。put(nodeG, 5);
  nodeA.getChild()。put(nodeF, 2);
  nodeB.getChild()。put(nodeA, 1);
  nodeB.getChild()。put(nodeF, 2);
  nodeB.getChild()。put(nodeH, 4);
  nodeC.getChild()。put(nodeA, 1);
  nodeC.getChild()。put(nodeG, 3);
  nodeD.getChild()。put(nodeA, 4);
  nodeD.getChild()。put(nodeE, 1);
  nodeE.getChild()。put(nodeD, 1);
  nodeE.getChild()。put(nodeF, 1);
  nodeF.getChild()。put(nodeE, 1);
  nodeF.getChild()。put(nodeB, 2);
  nodeF.getChild()。put(nodeA, 2);
  nodeG.getChild()。put(nodeC, 3);
  nodeG.getChild()。put(nodeA, 5);
  nodeG.getChild()。put(nodeH, 1);
  nodeH.getChild()。put(nodeB, 4);
  nodeH.getChild()。put(nodeG, 1);
  open.add(nodeB);
  open.add(nodeC);
  open.add(nodeD);
  open.add(nodeE);
  open.add(nodeF);
  open.add(nodeG);
  open.add(nodeH);
  close.add(nodeA);
  return nodeA;
  }
  }

有帮助
(0)
0%
没帮助
(0)
0%
  • 上一篇:Java Socket实战
  • 下一篇:jsp空指针问题