JAVA实现DIJKSTRA算法
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算法的更多相关文章
- Java用Dijkstra算法实现地图两点的最短路径查询(Android版)
地图上实现最短路径的查询,据我了解的,一般用Dijkstra算法和A*算法来实现.由于这是一个课程项目,时间比较急,而且自己不熟悉A*算法,所以参考网上的Dijkstra算法(http://blog. ...
- Java实现Dijkstra算法求最短路径
任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...
- Dijkstra算法求最短路径(java)(转)
原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...
- 最短路径算法之Dijkstra算法(java实现)
前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...
- Dijkstra算法之 Java详解
转载:http://www.cnblogs.com/skywang12345/ 迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主 ...
- 算法笔记_068:Dijkstra算法简单介绍(Java)
目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码 1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点, ...
- Dijkstra算法(一)之 C语言详解
本章介绍迪杰斯特拉算法.和以往一样,本文会先对迪杰斯特拉算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法 ...
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)
一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...
- HDU 1874 畅通工程续(初涉dijkstra算法实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...
随机推荐
- 使用Pig对手机上网日志进行分析
在安装成功Pig的基础上.本文将使用Pig对手机上网日志进行分析,详细过程例如以下: 写在前面: 手机上网日志文件phone_log.txt.文件内容 及 字段说明部分截图例如以下 需求分析 显示每一 ...
- c# CacheManager 缓存管理
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- UltimateRecyclerView的用法具体解释
近期在用非常多第三方库的时候,发现有一些附带的demo写的不是非常全面或者样例的代码太多,凝视太少,要想使用还要去看下源代码什么的(.. .用第三方开源库不就是想节省时间嘛).所以决定每周两到三篇.写 ...
- align="absmiddle" 图片的中间上下对齐
align=absmiddle表示图像的中间与同一行中最大元素的中间对齐 AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐.AbsMiddle 图像的中间与同一行中最大元素的中间对齐.B ...
- mnesia练习及基本操作
Mnesia基本用法 查看表结构 查看mnesia表的结构: mnesia:info(). 查看此表的基本信息: mnesia:table_info(<tableName>, all). ...
- 【TensorFlow-windows】(三) 多层感知器进行手写数字识别(mnist)
主要内容: 1.基于多层感知器的mnist手写数字识别(代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...
- 网络协议分析之wireshark---抓包使用
Wireshark基本介绍和学习TCP三次握手 之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS. 这篇文章介绍另一个好用的抓包工具wireshark, 用来获取网络数据封包,包括ht ...
- js thiskeyword
相信大家都接触过this了,那么 this究竟是什么意思呢?看其字面意思就是个代词.指代其它的一些东西. 那么我们在程序其中,事实上也是一样.this也是个代词. 比方我们在java其中,this的k ...
- 基于docker/虚拟机的esp32远程工作流
原文:基于docker/虚拟机的esp32远程工作流 工作流框图 背景说明 为什么需要这套工作流--为了满足高效和灵活的开发方式 因为我经常需要在公司和家里切换不同的电脑工作,所以编译环境需要在远程主 ...
- LeetCode(88)题解-- Merge Sorted Array
https://leetcode.com/problems/merge-sorted-array/ 题目: Given two sorted integer arrays nums1 and nums ...