import java.util.Queue;
import java.util.LinkedList; public class dijkstra{
public static void main(String args[]){
System.out.println("dijkstra algo");
/*construct the adjacent table begin*/
Node n0 = new Node(0);
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(5);
AdjNode n0n1 = new AdjNode(7,n1);
AdjNode n0n2 = new AdjNode(9,n2);
AdjNode n0n5 = new AdjNode(14,n5); AdjNode n1n0 = new AdjNode(7,n0);
AdjNode n1n2 = new AdjNode(10,n2);
AdjNode n1n3 = new AdjNode(15,n3); AdjNode n2n0 = new AdjNode(9,n0);
AdjNode n2n5 = new AdjNode(2,n5);
AdjNode n2n3 = new AdjNode(11,n3); AdjNode n3n1 = new AdjNode(15,n1);
AdjNode n3n2 = new AdjNode(11,n2);
AdjNode n3n4 = new AdjNode(6,n4); AdjNode n4n3 = new AdjNode(6,n3);
AdjNode n4n5 = new AdjNode(9,n5); AdjNode n5n4 = new AdjNode(9,n4);
AdjNode n5n2 = new AdjNode(2,n2);
AdjNode n5n0 = new AdjNode(14,n0); AdjNode[] n0adj = {n0n1,n0n2,n0n5};
AdjNode[] n1adj = {n1n0,n1n2,n1n3};
AdjNode[] n2adj = {n2n0,n2n5,n2n3};
AdjNode[] n3adj = {n3n1,n3n2,n3n4};
AdjNode[] n4adj = {n4n3,n4n5};
AdjNode[] n5adj = {n5n4,n5n2,n5n0};
n0.addAdjNodes(n0adj);
n1.addAdjNodes(n1adj);
n2.addAdjNodes(n2adj);
n3.addAdjNodes(n3adj);
n4.addAdjNodes(n4adj);
n5.addAdjNodes(n5adj);
/*construct the adjacent table end*/
Node[] G = {n0,n1,n2,n3,n4,n5}; Queue<Node> queue = new LinkedList<Node>();
AdjNode[] currAdjNodes;
n0.color = 1;
n0.vt++;
n0.setShortestPathLen(0);
queue.offer(n0);
Node currNode = queue.poll();
while(currNode != null){
currAdjNodes = currNode.getAllAdjNodes(); for(int i=0;i<currAdjNodes.length;i++){
if(currAdjNodes[i].adjNode.getShortestPathLen() > (currNode.getShortestPathLen()+currAdjNodes[i].weight)){
currAdjNodes[i].adjNode.setShortestPathLen(currNode.getShortestPathLen()+currAdjNodes[i].weight);
currAdjNodes[i].adjNode.setPreNode(currNode);
}
if(currAdjNodes[i].adjNode.color == 0){
currAdjNodes[i].adjNode.color = 1;
currAdjNodes[i].adjNode.vt++;
queue.offer(currAdjNodes[i].adjNode);
}
} currNode.color = 2;
currNode = queue.poll();
} for(int i=0;i<G.length;i++){
System.out.println("shortest path of " + i + "node:" + G[i].getShortestPathLen()+" vt:"+G[i].vt);
}
}
}
public class Node{
private int index = 0,shortestPathLen = 10000;
private Node preNode = null;
private AdjNode[] nodeArray;
public int color = 0;
public int vt = 0;
public Node(int ind){
index = ind;
} public void addAdjNodes(AdjNode[] nodes){
nodeArray = nodes;
} public AdjNode[] getAllAdjNodes(){
return nodeArray;
} public void setPreNode(Node n){
preNode = n;
} public void setShortestPathLen(int len){
shortestPathLen = len;
} public int getShortestPathLen(){
return shortestPathLen;
}
}
public class AdjNode{
int weight = 0;
Node adjNode = null;
public AdjNode(int w,Node n){
adjNode = n;
weight = w;
}
}

JAVA实现DIJKSTRA算法的更多相关文章

  1. Java用Dijkstra算法实现地图两点的最短路径查询(Android版)

    地图上实现最短路径的查询,据我了解的,一般用Dijkstra算法和A*算法来实现.由于这是一个课程项目,时间比较急,而且自己不熟悉A*算法,所以参考网上的Dijkstra算法(http://blog. ...

  2. Java实现Dijkstra算法求最短路径

    任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...

  3. Dijkstra算法求最短路径(java)(转)

    原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...

  4. 最短路径算法之Dijkstra算法(java实现)

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

  5. Dijkstra算法之 Java详解

    转载:http://www.cnblogs.com/skywang12345/ 迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主 ...

  6. 算法笔记_068:Dijkstra算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点, ...

  7. Dijkstra算法(一)之 C语言详解

    本章介绍迪杰斯特拉算法.和以往一样,本文会先对迪杰斯特拉算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法 ...

  8. 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)

    一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...

  9. HDU 1874 畅通工程续(初涉dijkstra算法实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...

随机推荐

  1. dwr框架中DWRUtil的方法

    dwr框架中DWRUtil的方法 2008-10-14 17:57:23|  分类: JAVA |  标签: |举报 |字号大中小 订阅     7. util.js 功能 util.js包含了一些工 ...

  2. 基于LRU Cache的简单缓存

    package com.test.testCache; import java.util.Map; import org.json.JSONArray; import org.json.JSONExc ...

  3. 2016/07/07 apmserv5.2.6 Apache启动失败,请检查相关配置。MySQL5.1已启动。

    因为要用PHP做一个程序,在本机上配PHP环境,下了个APMServ5.26,安装很简单,不再多说,装好后,启动,提示错误,具体是:“Apache启动失败,请检查相关配置.√MySQL5.1已启动”, ...

  4. superslider网站特效插件

    网站上常用的“焦点图/幻灯片”“Tab标签切换”“图片滚动”“无缝滚动” 如何使用 1.引入jquery.js    引入superslider.js 2.编写HTML 以下是默认的HTMl结构,分别 ...

  5. Java中实现函数的阻塞

    使用Object.wait()即可实现阻塞,使用Object.notify()解除阻塞,代码示例如下 MainFrame.java import javax.swing.JFrame; import ...

  6. jQuery处理点击父级checkbox所有子级checkbox都选中,取消选中所有子级checkbox都取消

    注意,每个foreach标签内部都加一个div用来区分各个层次关系,模板代码如下: <foreach name='node' item='v'> <div class='a' ali ...

  7. jps不显示java进程信息

    本来想自己整理,发现已经有前人整理,并且完美解决了我的问题,故转载,感谢分享 转自:http://trinea.iteye.com/blog/1196400 对于jps较熟悉可以直接查看第二部分的分析 ...

  8. Automating hybrid apps

    Automating hybrid apps One of the core principles of Appium is that you shouldn’t have to change you ...

  9. shared SDK 微信开放平台遇到的问题

    shared sdk是用于集成到app中,方便快速社交化分享的组件,其使用方法比较简单,参考官网的快速集成步骤就能搞定.稍微麻烦一点的就是需要到各个开放平台去注册你的APP. 在各个开放平台注册好之后 ...

  10. Java接口测试之使用有道翻译API

    写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...