南京邮电大学运筹学课程实验报告1 图与网络求解 指导

一、题目描述

实验四      图与网络问题求解                     

实验属性: 设计型   

实验目的

1.理解图的基本概念;

2.掌握运筹学软件的使用方法;

3. 掌握图中Dijkstra算法Matlab求解原理和方法。

实验内容

书本P347,以9.3.2节Dijkstra算法为例,给出实现Dijkstra算法的Matlab程序,写出具体算法步骤并对使用的符号进行注释说明。

1.记录实验步骤与结果

2.对结果作适当分析;

3.完成实验报告。

1. 实验过程与步骤:

二、实验内容

步骤1:使用MATLAB工具进行实验,构建Dijkstra算法函数

其中A是有向图D的邻接矩阵,(aij)指i到j的距离;n是矩阵的维数;s是起始点。

步骤2:初始化Dijkstra算法函数

其中S表示顶点是否在S中,第i个位置值为零表示顶点vi不在S中,反之则表示在S中,S(1)表示将始点v1放入S中。

r代替lambda,第i个位置的值表示在最短路径中该点的前一个顶点。

d的第i个位置表示v1到vi的最短距离。

步骤3:运行Dijkstra算法函数

其中进行n-1次循环即可结束该算法,经过判断S是否等于V来执行条件语句,而后即可进行运算,并通过disp命令语句将结果输出。

 

步骤4:命令行窗口调用Dijkstra算法函数

其中设置起始点为1,矩阵维数为9,并定义9阶矩阵初始化数据,随后调用Dijkstra算法函数输出运行结果。

步骤5:结果展示

由此我们得到本题中由起始点v1出发到其他各顶点的最短距离与最短路路径。

附有相关matlab的M文件代码:

function [d,r]=Dijkstra(A,n,s)

S=zeros(1,n);
S(1)=1;
P=zeros(1,n);T=zeros(1,n);
r=zeros(1,n);
d=zeros(1,n);
for i=1:n
    if i~=s
        T(i)=inf;
        r(i)=100;
    end
end
k=s;

for i=1:n-1
    if all(S)==1
        d=P;
        disp('从始点v1出发到其他各顶点的最短距离为:');
        disp(d);
        disp('从始点v1出发到其他个顶点的最短路路径为:');
        disp(r);
        return;
    else
        m=inf;
        e=0;
        for j=1:n
            if A(k,j)<inf && S(j)==0 && T(j)>P(k)+A(k,j)
                T(j)=P(k)+A(k,j);
                r(j)=k;
            end
            if S(j)==0 && T(j)<m
                m=T(j);
                e=j;
            end
        end
        if m<inf
            P(e)=T(e);
            S(e)=1;
            k=e
            i=i+1;
        else
            d=P;
            for j=1:n
                if S(j)==0
                    d(j)=T(j);
                end
            end
            disp('从始点v1出发到其他各顶点的最短距离为:');
            disp(d);
            disp('从始点v1出发到其他各顶点的最短路路径为:');
            disp(r);
            return;
        end
    end
end
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值