zero6059 2019-09-12 10:47 采纳率: 0%
浏览 533

matlab dijkstra算法索引超出矩阵维度,求解?

算法中有一行是这样的:

temp2=find(d(index1)==d(temp)-a(temp,index1))
index2(temp)=index1(temp2(1)) %记录标号索引

我的数据是一个130*130的对称矩阵,第三次循环时发生问题,报错如图:
图片说明

此时d(index1)和d(temp)-a(temp,index1)的值分别如下图中的第一个ans和第二个ans,temp2 如图

图片说明

我用了一个6*6的矩阵做测试的时候是没有问题的,求问为什么会报错呢?另,为什么temp2的值会是空的呢?

以下是完整代码:

% a=zeros(6);
% a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10;               
% a(2,3)=15;a(2,4)=20;a(2,6)=25;
% a(3,4)=10;a(3,5)=20;
% a(4,5)=10;a(4,6)=25;
% a(5,6)=55;
% a=a+a'
distance = xlsread('C:\Users\zhaojuan\Desktop\9月建模\distance.xlsx');
linjiejuzhen = xlsread('C:\Users\zhaojuan\Desktop\9月建模\邻接矩阵.xlsx');
linjiejuzhen = linjiejuzhen +linjiejuzhen';
a = distance.*linjiejuzhen;
all(all(a==a')) %判断是否是对称矩阵
a(find(a == 0))=inf %将a=0的数全部替换为无强大
pb(1:length(a))=0;pb(1)=1;  %当一个点已经求出到原点的最短距离时,其下标i对应的pb(i)赋1
index1=1 %存放存入S集合的顺序
index2=ones(1,length(a)) %存放始点到第i点最短通路中第i顶点前一顶点的序号
d(1:length(a))=inf;d(1)=0  %存放由始点到第i点最短通路的值
temp=1  %temp表示c1,算c1到其它点的最短路。
while sum(pb)<length(a)  %看是否所有的点都标记为P标号
tb=find(pb==0) %找到标号为0的所有点,即找到还没有存入S的点
d(tb)=min(d(tb),d(temp)+a(temp,tb))%计算标号为0的点的最短路,或者是从原点直接到这个点,又或者是原点经过r1,间接到达这个点
tmpb=find(d(tb)==min(d(tb)))  %求d[tb]序列最小值的下标
temp=tb(tmpb(1))%可能有多条路径同时到达最小值,却其中一个,temp也从原点变为下一个点
pb(temp)=1%找到最小路径的表对应的pb(i)=1
index1=[index1,temp]  %存放存入S集合的顺序
d(index1)
d(temp)-a(temp,index1)
temp2=find(d(index1)==d(temp)-a(temp,index1))
index2(temp)=index1(temp2(1)) %记录标号索引
end
d, index1, index2
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2019-10-04 08:35
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大