基于无向图且权重单一的最短路径Dijkstra算法——JAVA实现

做一个无向图的权重单一的最短路径算法。

模拟停车场最近车位的选择。


首先参考了博友JavaMan_chen的博文
http://blog.csdn.net/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\":" 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值