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. source insight 配置小记

    0/ Alt + T 打开 Document Options,设置字体,添加 C++ 类型文件 .cc , 删除 Plain txt 类型以避免添加 .txt 文件 1/ Alt + F12 切换函数 ...

  2. MapReduce 1工作原理图文详解

    MapReduce工作原理图文详解 一 MapReduce程序执行流程 程序执行流程图如下: 流程分析:1.在客户端启动一个作业.2.向JobTracker请求一个Job ID.3.将运行作业所需要的 ...

  3. unity3d从零開始(五):了解摄像机

    1.简单介绍         Unity的摄像机是用来将游戏世界呈现给玩家的,游戏场景中至少有一台摄像机.也能够有多台. 2.类型         Unity中支持两种类型的摄像机,各自是Perspe ...

  4. MongoDB——mongo-connector同步到ES

    1.搭建完毕MongoDb复制集环境 2.开始安装 mongo-connector pip install mongo-connector:基于pip命令,不管是linux .window 系统默认有 ...

  5. 远程访问Linux的常见方式

    访问方式 不加密文字界面:telnet.rsh 加密文字界面:SSH 图形界面:Xdmcp.RDP.VNC SSH SSH用来取代finger.R shell(rlogin.rcp.rsh).teln ...

  6. Golang RPC 性能测试

    Golang RPC 性能测试 | KDF5000 http://kdf5000.com/2017/03/28/Golang-RPC-性能测试/

  7. checkbox 背景图片 纯CSS处理办法

    CSS .table_container input[type="checkbox"] { background: #fff url(/img/blue.png); backgro ...

  8. win10搭建selendroid测试环境

    官网对于搭建selendroid列出如下要求: 就如 Junit 一样,Selendroid 可以在 Mac,Linux 和 Windows 上使用.Java 主打的就是跨平台. Java SDK ( ...

  9. Redis相关的内核参数解释与设置

    参数 somaxconn /proc/sys/net/core/somaxconn 对于TCP连接,Client和Server连接需要三次握手来建立连接,Server端监听状态会由LISTEN切换为E ...

  10. 快速上手Ubuntu之安装篇——安装win7,Ubuntu16.04双系统【转】

    本文转载自:http://blog.csdn.net/qq_28205153/article/details/52203512 Linux可以说是开发者的系统,对于开发者来说,Linux发行版不仅为我 ...