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用于求 ...
随机推荐
- Qt 环境下的mapx控件-------2
今天花了一天的时间去查找mapx相关的资料,但是到最后想要的东西还是一无所获,不过还是学到了很多东西.下面以大家分享一下: mapx软件的安装:下载后安装mapx软件,成功后会在安装路径下存在acti ...
- js实现图片无缝连接
效果图 1.首先先看看html和css代码 <style> *{padding:0;margin:0;} #div1{margin:100px auto;background:red;wi ...
- JS-改变页面的颜色之变化核心-获取六位的随机数
前言:从JS-改变页面的颜色(一).JS-改变页面的颜色(二).JS-改变页面的颜色(三)三个简单的小白例,我们可以轻而易举的看到起变化的核心是——十六进制颜色值的获取方式,所以,我们这里总结一下获取 ...
- Javascript中的Promise
Promise定义 Promise是CommonJs的规范之一,包含resolve,reject,done,fail,then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.异步在web开发中 ...
- webconfig中注册HttpHandler报错:检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
为什么会出现以上错误? 在IIS7的应用程序池有两种模式,一种是"集成模式",一种是"经典模式". 经典模式 则是我们以前习惯的IIS 6 的方式. 如果使用集 ...
- php 中常见的函数及系统常量
1.判断是否存在某函数: function_exists('memory_get_usage'): 2.统计程序执行到某节点消耗的系统内存: memory_get_usage(); 3.当前访问目录的 ...
- 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载
要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...
- GIS基本概念
简介 WKT(Well-known text)是开放地理空间联盟OGC(Open GIS Consortium )制定的一种文本标记语言,用于表示矢量几何对象.空间参照系统及空间参照系统之间的转换. ...
- 【Shell脚本】怎样表示一个for循环
[Shell脚本]怎样表示一个for循环 在此说一下我常用的两个结构: 1. for i in $(seq 1 100); do echo $i done 2. for (( i = ...
- ulimit
.修改ulimit vim /etc/security/limits.conf * soft nproc * hard nproc * soft nofile * hard nofile vim /e ...

