zoukankan      html  css  js  c++  java
  • dijsk最短路径算法(matlab)

    算法描述:
    输入图G,源点v0,输出源点到各点的最短距离D
    中间变量v0保存当前已经处理到的顶点集合,v1保存剩余的集合
    1.初始化v1,D
    2.计算v0到v1各点的最短距离,保存到D
    for each i in v0;D(j)=min[D(j),G(v0(1),i)+G(i,j)] ,where j in v1
    3.将D中最小的那一项加入到v0,并且从v1删除这一项。
    4.转到2,直到v0包含所有顶点。
    %dijsk最短路径算法
    clear,clc
    G=[
        inf inf 10 inf 30 100;
        inf inf 5  inf inf inf;
        inf 5 inf 50 inf inf;
        inf inf inf inf inf 10;
        inf inf inf 20 inf 60;
        inf inf inf inf inf inf;
    ];  %邻接矩阵
    N=size(G,1); %顶点数
    v0=1; %源点
    v1=ones(1,N); %除去原点后的集合
    v1(v0)=0;
    %计算和源点最近的点
    D=G(v0,:);
    while 1
        D2=D;
        for i=1:N
            if v1(i)==0
                D2(i)=inf;
            end
        end
        D2
        [Dmin id]=min(D2);
        if isinf(Dmin),error,end

        v0=[v0 id] %将最近的点加入v0集合,并从v1集合中删除
        v1(id)=0;
       
        if size(v0,2)==N,break;end
        %计算v0(1)到v1各点的最近距离
        fprintf('计算v0(1)到v1各点的最近距离\n');v0,v1
        id=0;
        for j=1:N %计算到j的最近距离
            if v1(j)
                for i=1:N
                    if ~v1(i) %i在vo中
                        D(j)=min(D(j),D(i)+G(i,j));
                    end
                    D(j)=min(D(j),G(v0(1),i)+G(i,j));
                end
            end
        end
        fprintf('最近距离\n');D
        if isinf(Dmin),error,end
    end
    v0

    %>> v0
    %v0 =
    %     1     3     5     4     6

  • 相关阅读:
    测试学习使用
    Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
    web框架之Spring-MVC环境搭建
    serialVersionUID
    在eclipse中部署发布web项目 和 更改eclipseweb项目发布的路径
    servlet HttpSession 监听器
    java web 中的转发和重定向
    Spring MVC 中的 forward 和 redirect
    各个部门英语标识
    添加滚动条,内容多时显示,内容少时隐藏
  • 原文地址:https://www.cnblogs.com/cutepig/p/887503.html
Copyright © 2011-2022 走看看