做一个无向图的权重单一的最短路径算法。
模拟停车场最近车位的选择。
首先参考了博友JavaMan_chen的博文
http://blog.youkuaiyun.com/javaman_chen/article/details/8254309
但是这个算法是有问题的。
算法中,如果A点是当前点,是选取距离A点权重最小的那一点作为下一个路径点的。
这就带来了一个问题,即,距离A点的2个点如果权重相同,那就会随机选取其中一条。
于是,在数据量稍微大点的时候,就出错了。
在这里使用Dijkstra算法使用的是用OPEN, CLOSE表的方式。
首先,定义了坐标点的数据结构
Coordinate.java
Coordinate中包含相邻坐标的List,以及距离起始点的距离。
在算法中,一开始要进行所有路径点的关联。
之后,通过从起始点进行扩散,将所有点的step计算出来。
package com.harlan.dijkstra;
import java.util.LinkedList;
/**
* 坐标点的数据结构
*
* @author Harlan
*
*/
public class Coordinate {
//x坐标
public int x;
//y坐标
public int y;
//相邻坐标
public LinkedList<Coordinate> adj;
//距离
public int steps;
// 最短路径中的前一个顶点
public Coordinate lastPoint;
;
public Coordinate(){
}
public Coordinate(int newX, int newY) {
x = newX;
y = newY;
adj=new LinkedList<Coordinate>();
reset();
}
public void reset(){
steps=Integer.MAX_VALUE;
lastPoint=null;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Coordinate))
return false;
Coordinate other = (Coordinate) obj;
if (x == other.x && y == other.y) {
return true;
}
return false;
}
@Override
public int hashCode() {
return x*10000+y;
}
/**
* 以JSON格式展示坐标
*/
@Override
public String toString() {
return "{\"x\":" + x + ",\"y\":" +

本文介绍了一种改进的Dijkstra算法,用于解决无向图中权重单一的最短路径问题,特别是在模拟停车场最近车位选择场景中的应用。原算法存在当多个相邻节点权重相同时会随机选择的问题,作者通过使用OPEN和CLOSE表的方法解决了这一问题。算法包括定义坐标点数据结构,初始化所有路径点的关联,以及从起点扩散逐步计算所有点的步数。
最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



