QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2549|回复: 3
打印 上一主题 下一主题

【新手求助】matlab Dijkstra算法求最短路径 程序报错~求助!!

[复制链接]
字体大小: 正常 放大

1

主题

9

听众

263

积分

升级  81.5%

  • TA的每日心情

    2014-2-7 00:28
  • 签到天数: 86 天

    [LV.6]常住居民II

    新人进步奖

    群组2013年数学建模国赛备

    跳转到指定楼层
    1#
    发表于 2013-9-2 00:00 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    原程序如下:

    clc
    a=zeros(100);
    A=100./[90 50 50 50 90 90 50 90 90;
       110 90 90 90 90 50 50 90 90;
       90 90 90 110 110 110 110 110 110;
       90 90 90 90 90 90 50 50 90;
       50 50 90 50 90 50 50 50 90;
       50 110 110 90 90 90 50 90 90;
       50 90 90 90 90 50 50 90 110;
       90 90 50 90 90 50 50 90 90;
       90 90 50 50 50 50 110 110 90;
       130 130 130 130 50 50 50 90 110];
    B=100./[110 90 50 50 90 90 50 90 90 90;
       130 110 90 90 90 90 50 90 90 90;
       130 110 90 110 90 110 90 50 90 90;
       130 110 90 110 90 110 90 50 90 90;
       130 110 90 110 90 110 50 90 50 50;
       130 90 90 90 90 110 50 90 50 90;
       130 90 50 90 90 110 50 110 110 90;
       130 50 50 90 90 110 90 110 110 90;
       130 50 50 90 50 90 50 110 110 90];
    for i=0:9
       for  j=1:9  
           a(i*10+j,i*10+j+1)=A(i+1,j);
           a((j-1)*10+i+1,(j-1)*10+i+1+10)=B(j,i+1);
       end
    end
    for i=1:10
        for j=1:10
            if i==j
                a(i,j)=0;
            end
        end
    end
    a(find(a==0))=inf;
    a;
    pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));
    d(1:length(a))=inf;d(1)=0;temp=1;
    while sum(pb)<length(a)
    tb=find(pb==0);
    d(tb)=min(d(tb),d(temp)+a(temp,tb));
    tmpb=find(d(tb)==min(d(tb)));
    temp=tb(tmpb(1));
    pb(temp)=1;
    index1=[index1,temp];
    temp2=find(d(index1)==d(temp)-a(temp,index1));
    index2(temp)=index1(temp2(1));
    end
    d,index1,index2

    运行结果:
    Attempted to access temp2(1); index out of bounds because numel(temp2)=0.

    Error in lu (line 47)
    index2(temp)=index1(temp2(1));

    即矩阵temp2(1)中没有元素。。。
    但是我求解temp2的时候,即find(d(index1)==d(temp)-a(temp,index1)的时候temp2有值 但同时出现了很多行的“temp2 =Empty matrix: 1-by-0”
    理论上temp2中是有元素的,为什么整体运行程序总是说“numel(temp2)=0”
    程序中a是邻接矩阵,并且a输出是没问题的。
    之后如何用Dijkstra算法求解最短路径和具体路线?
    matlab菜鸟一只,希望问题讲清楚了。。。请求大神帮忙!!!!
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    madio        

    3万

    主题

    1310

    听众

    5万

    积分

  • TA的每日心情
    奋斗
    2024-7-1 22:21
  • 签到天数: 2014 天

    [LV.Master]伴坛终老

    自我介绍
    数学中国站长

    社区QQ达人 邮箱绑定达人 优秀斑竹奖 发帖功臣 风雨历程奖 新人进步奖 最具活力勋章

    群组数学建模培训课堂1

    群组数学中国美赛辅助报名

    群组Matlab讨论组

    群组2013认证赛A题讨论群组

    群组2013认证赛C题讨论群组

    编程思路不太明确,就是a(temp,index1)的下标肯定取的不对,取到了inf,如果去掉这一行
    index1=[index1,temp];还可以循环两步,但是后面还是会取到inf,你仔细看看
    数学建模社会化
    回复

    使用道具 举报

    lvyanlong        

    93

    主题

    48

    听众

    2225

    积分

    升级  7.5%

  • TA的每日心情
    擦汗
    2019-9-9 17:09
  • 签到天数: 321 天

    [LV.8]以坛为家I

    2013挑战赛参赛者

    自我介绍
    参加数学建模

    发帖功臣 新人进步奖

    群组2013年电工杯B题讨论群

    群组数模思想方法大全

    群组学术交流A

    群组第三届数模基础实训

    群组认证人才交流群

    回复

    使用道具 举报

    5

    主题

    9

    听众

    263

    积分

    升级  81.5%

  • TA的每日心情
    郁闷
    2014-11-17 15:04
  • 签到天数: 46 天

    [LV.5]常住居民I

    群组Matlab讨论组

    群组2013全国研究生数学建

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-25 06:31 , Processed in 1.485744 second(s), 71 queries .

    回顶部