网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.java中的字节码.
.JBPM源码分析(三)---Execut.
.学编程的人不能不看的好文章(2).
.使用JAVA建立稳定的多线程服务器.
.HibernateTool生成Mapping文件工.
.激情后的思考:.NET想说爱你不容.
.模糊测试 对代码质量影响深远的技.
.用Applet写的菜单程序 machine.
.利用ThreadLocal简化struts开发.
.介绍NEC扩展API.
.Java连接SQL Server 2000.
.在运行时刻从文件中调入Class.
.一个简单的定时器应用: VarTime.
.浅谈Hibernate获得成功的十大理由.
.我对类,方法 ,接口的认识.
.LOG10E 属性.
.java exe 程序.
.用JavaBean实现文件上载(一)请求.
.Swing 常用的 Package.
.Eclipse3.0中配置SQLExplorer插件.

单源点最短路径Dijkstra算法的JAVA实现

发表日期:2008-1-5


在城市智能交通中,经常会用到最短路径的问题,比如找最佳的行车路线等,Dijkstra算法做为最经典的求解方法,为我们指明了方向.不过真正想让我了解该算法的原因是在学习ICTCLAS的N-最短路径算法,虽然和我们常用的案例有一点区别,但基本相同,为了更好的理解N-最短路径算法,我又重新把大学时代的数据结构知识搬了出来。

在网上找到一篇文章,非常具体生动(有FLASH动画演示)的描述了该算法的实现,不过第一页右下角的图终点那一列2和3弄反了,看的时候要注重 ,具体的算法描述不再赘述,请参考:

http://student.zjzk.cn/course_ware/data_structure/web/tu/tu7.5.1.htm

下面给出我的算法实现具体代码,为了更好的验证程序的正确性,在原来的基础上我又多加了几条边

package sinboy.datastrUCture;

import Java.util.ArrayList;

public class Dijkstra ...{
    static ArrayList<Side> map = null;

    static ArrayList<Integer> redAgg = null;

    static ArrayList<Integer> blueAgg = null;

    static Side[] parents = null;

    public static void main(String[] args) ...{
        // 初始化顶点集
        int[] nodes = ...{ 0, 1, 3, 2, 4, 5,6 };

        // 初始化有向权重图
        map = new ArrayList<Side>();
        map.add(new Side(0, 1, 10));
        map.add(new Side(0, 3, 30));
        map.add(new Side(0, 4, 100));
        map.add(new Side(1, 2, 50));
        map.add(new Side(2, 4, 10));
        map.add(new Side(3, 2, 20));
        map.add(new Side(3, 4, 60));
        map.add(new Side(4, 5, 50));
        map.add(new Side(3, 5, 60));
        map.add(new Side(5, 6, 10));
        map.add(new Side(3, 6, 80));

        // 初始化已知最短路径的顶点集,即红点集,只加入顶点0
        redAgg = new ArrayList<Integer>();
        redAgg.add(nodes[0]);

        // 初始化未知最短路径的顶点集,即蓝点集
        blueAgg = new ArrayList<Integer>();
        for (int i = 1; i < nodes.length; i++)
            blueAgg.add(nodes[i]);

        // 初始化每个顶点在最短路径中的父结点,及它们之间的权重,权重-1表示无连通
        parents = new Side[nodes.length];

上一篇:实例:创建SWT项目的原生库导入问题 人气:684
下一篇:Java性能设计 人气:602
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐