matlab已达到最大递归限制 500。使用 set(0,'RecursionLimit',N) 可更改此限制。 5

%两点间最短距离的Dijkstra算法function[d,index1,index2]=Dijkf(a)%a表示图的权值矩阵%d表示所求最短路的权和%index1表示标... %两点间最短距离的Dijkstra算法
function [d,index1,index2]=Dijkf(a)
% a表示图的权值矩阵
% d表示所求最短路的权和
% index1 表示标号顶点的顺序
% index2 表示标号顶点索引
%参数初始化
M=max(max(a));
pb(1:length(a))=0;
pb(1)=1;
index1=1;
index2=ones(1:length(a));
d(1:length(a))=M;
d(1)=0;
temp=1;
%更新l(v),同时记录顶点顺序和顶点索引
while sum(pb)<length(a) %重复步骤2,直到满足停止条件
tb=find(pb==0); %第i次循环处理第i+1个顶点
d(tb)=min(d(tb),d(temp)+a(temp,tb)); %更新l(v)
tmpb=find(d(tb)==min(d(tb)));
temp=tb(tmpb(1));
pb(temp)=1;
index1=[index1,temp]; %记录标号顺序
index=index1(find(d(index1)==d(temp)-a(temp,index1)));
if length(index)>=2
index=index(1);
end
index2(temp)=index; %记录标号索引
end
d;
index1;
index2;
M=1000;
a(1,:)=[0,50,M,40,25,10];
a(2,:)=[zeros(1,2),15,20,M,25];
a(3,:)=[zeros(1,3),10,20,M];
a(4,:)=[zeros(1,4),10,25];
a(5,:)=[zeros(1,5),55];
a(6,:)=zeros(1,6);
a=a+a';
[d index1 index2]=Dijkf(a)

已达到最大递归限制 500。使用 set(0,'RecursionLimit',N) 可更改此限制。请注意,超出可用堆栈空间可能会使 MATLAB 和/或计算机崩溃。 这个怎么弄大神
展开
 我来答
luan_yun1991
2018-01-03 · TA获得超过109个赞
知道小有建树答主
回答量:57
采纳率:55%
帮助的人:30.4万
展开全部

你的程序不是递归函数。是你使用的方法有问题

前面的部分是函数Dijkf,存成Dijkf.m

index1;
index2;
M=1000;
a(1,:)=[0,50,M,40,25,10];
a(2,:)=[zeros(1,2),15,20,M,25];
a(3,:)=[zeros(1,3),10,20,M];
a(4,:)=[zeros(1,4),10,25];
a(5,:)=[zeros(1,5),55];
a(6,:)=zeros(1,6);
a=a+a';
[d index1 index2]=Dijkf(a)

这部分是主程序,运行这部分即可

飞跃梦想华
2015-04-12 · TA获得超过333个赞
知道小有建树答主
回答量:388
采纳率:89%
帮助的人:107万
展开全部
为什么要用递归算法呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式