- 在线时间
- 40 小时
- 最后登录
- 2015-10-27
- 注册时间
- 2013-7-12
- 听众数
- 9
- 收听数
- 0
- 能力
- 0 分
- 体力
- 716 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 263
- 相册
- 0
- 日志
- 0
- 记录
- 1
- 帖子
- 98
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 10
升级   81.5% TA的每日心情 | 衰 2014-2-7 00:28 |
---|
签到天数: 86 天 [LV.6]常住居民II
 群组: 2013年数学建模国赛备 |
原程序如下:
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
|