Dijkstra搜索算法
Dijkstra无向图
算法执行步骤如下:
上面两张图来源于:http://blog.csdn.net/v_july_v/article/details/6096981
很牛的大神,膜拜,此处有鲜花
Dijkstra 的算法实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Dijkstra {
List<verPoint>Graph; public List<verPoint> getGraph() {
return Graph;
} public void setGraph(List<verPoint> graph) {
Graph = graph;
} public double minDistance(double minD,Map<Integer,Double>distance,List<verPoint>Graph,List<verPoint>S,List<verPoint>U){ if(S==null){
S = new ArrayList();
U = new ArrayList();
S.add(Graph.get(0));
for(int i = 0;i<Graph.size();i++){
if(!S.contains(Graph.get(i))){
U.add(Graph.get(i));
}
}
}
if(S.size()==Graph.size()){ return minD;
}
verPoint nowPoint = S.get(S.size()-1); Map <Integer,Double>newdistance = new HashMap();
double []dis = new double[U.size()];
for(int i = 0;i<U.size();i++){
dis[i] = minD + nowPoint.distancePoint(U.get(i));//直接加上到U.get(i)的距离
if(dis[i]>distance.get(U.get(i).getId())){//与上一次到U.get(i)距离的比较
dis[i]=distance.get(U.get(i).getId());
}
newdistance.put(U.get(i).getId(), dis[i]);
} //寻找dis中最小的值所对应的索引值
int mindex = 0;
for(int i = 1;i<dis.length;i++){
if(dis[mindex]>dis[i]){
mindex = i;
}
}
double newMinD = dis[mindex];
S.add(U.get(mindex));
U.remove(mindex);
for(int i = 0;i<S.size();i++){
System.out.print(" "+S.get(i).getVerName());
}
System.out.println();
double min = minDistance(newMinD,newdistance,Graph,S,U);
return min;
} }应当注意的是:
1、minD存储的是每次搜寻后当前点与初始点之间的最小距离
2、distance中存储的是仍在open中的点到初始点的最小距离
3、每次循环的时候,首先将未在S中的点放入U中。S表示路径,U表示剩余点;
其次,计算S最后面的一点到U中每个点的距离,并且如果上一次也到过U中某个节点,则注意比较这两次到同一节点的距离,取更小的。然后取U中各节点最小距离,并放入S中直至S中元素等于图的元素个数
Dijkstra搜索算法的更多相关文章
- 【小白学游戏常用算法】二、A*启发式搜索算法
在上一篇博客中,我们一起学习了随机迷宫算法,在本篇博客中,我们将一起了解一下寻路算法中常用的A*算法. 通常情况下,迷宫寻路算法可以使用深度优先或者广度优先算法,但是由于效率的原因,不会直接使用这些算 ...
- 网格最短路径算法(Dijkstra & Fast Marching)
Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲.值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- 网格最短路径算法(Dijkstra & Fast Marching)(转)
Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲.值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的 ...
- 图论基础之Dijkstra算法的初探
图论,顾名思义就是有图有论. 图:由点"Vertex"和边"Edge "组成,且图分为有向图和无向图(本文讨论有向图),之前做毕业设计的 ...
- 聪明的搜索算法’ A*算法
A*算法 是一种启发式的搜索算法. 了解BFS.DFS或者Dijkstra算法的人应该知道.这些算法都是一种向四周盲目式搜索的方法. 启发式搜索: 启发式搜索就是在状态空间中的搜索 ...
- A*搜索算法
先了解一下什么是A*算法. A*搜寻算法,俗称A星算法.A*算法是用于寻找两点之间的最短路径,同时它也是一种静态路网中求解最短路最有效的直搜索方法.这是一种在图形平面上,有多个节点的路径,求出最低通过 ...
- 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)
做OJ需要用到搜索最短路径的题,于是整理了一下关于图的搜索算法: 图的搜索大致有三种比较常用的算法: 迪杰斯特拉算法(Dijkstra算法) 弗洛伊德算法(Floyd算法) SPFA算法 Dijkst ...
- AI贪吃蛇前瞻——基于Dijkstra算法的最短路径问题
在贪吃蛇流程结构优化之后,我又不满足于亲自操刀控制这条蠢蠢的蛇,干脆就让它升级成AI,我来看程序自己玩,哈哈. 一.Dijkstra算法原理 作为一种广为人知的单源最短路径算法,Dijkstra用于求 ...
随机推荐
- VMWare虚拟机 使用vmtools拷贝文件 临时文件问题
Win7下, 临时文件会存放在路径C:\Users\admin\AppData\Local\Temp\vmware-admin\VMwareDnD,如果不及时删除,C盘就会越来越大直至放满.
- mongoDB数据库和Spring MVC的整合
之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结. 第一步:加载jar.maven配置 <!-- mongodb开始 ...
- Access denied for user 'Administrator'@'localhost' (using password: YES)
Access denied for user 'Administrator'@'localhost' (using password: YES) 配置文件中明明是用的root <entry ke ...
- js back动作
history.back(-1):直接返回当前页的上一页,数据全部消息,是个新页面 history.go(-1):也是返回当前页的上一页,不过表单里的数据全部还在 history.back(0) 刷新 ...
- IE11错误:Exception in window.onload: An error has occuredJSPlugin.3005 解决方案
问题:新安装的IE11无法使用F12开发者工具,DOC资源管理器提示错误“Exception in window.onload: An error has occuredJSPlugin.3005”. ...
- javascript模式之模块模式
使用模式来组织代码有很多优点:使代码的结构更清晰,逻辑性更强,更容易维护.还可以避免很多错误. 首先,在javascript主要分为两大类: 编程模式-- 一些专门为javascript语言开发出的最 ...
- arcgis制作风或水流速流向图
制作风或水流速流向图 风速风向图或流速流向图相信大家都已经见过不少,但不知道有多少人会制作这样炫的专题图,下面这边文章向我们展示了当基本数据U和V矢量被存储时,怎样计算风或水流的速度和方向和对其进行符 ...
- C# 时间函数相减
1:第一种方式: "; "; DateTime firstDateTemp = DateTime.ParseExact(firsttime, "yyyyMMddHHmms ...
- delphi数据类型及占用的字节数 C++ 对应数据类型
delphi byte:1个字节. int/Integer: long: long long:8字节,64位 shortInt:2字节,16位 LongInt:4字节,32位 Int64:8字节,64 ...
- Python安装mysql-python错误提示python setup.py egg_info
做python项目,需要用到mysql,一般用python-mysql,安装时遇到错误提示如下: Command "python setup.py egg_info" failed ...

