MATLAB老是提示输入参数不足,请问怎么改?

function[D,path]=floyd(a)n=size(a,1);D=a;path=zeros(n,n);fori=1:nforj=1:nifD(i,j)~=in... function [D , path] = floyd(a)
n=size(a,1);
D=a;
path=zeros(n,n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j;
end
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)<D(i,j)
D(i,j)=D(i,k)+D(k,j);
path(i,j)=path(i,k)
end
end
end
end
D,path
根据求出的最短距离矩阵,我们可得出最小距离图
求出最小距离矩阵后,再用 Mtalab 编程求出最佳 H 圈和最小路程。Mtalab 源程序
如下:
clc,clear
floyd
a;%输入数据
c1=[1 2:21 22];
L=length(c1);
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if
a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<a(c1(m),c1(m+1))+a(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
end
end
end
end
sum1=0;
for i=1:L-1
sum1=sum1+a(c1(i),c1(i+1));
end
circle=c1;
sum=sum1;
c1=[1 22 2:21];%改变初始圈,该算法的最后一个顶点不动
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<...
a(c1(m),c1(m+1))+a(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
end
end
end
end
sum1=0;
for i=1:L-1
sum1=sum1+a(c1(i),c1(i+1));
end
if sum1<sum
sum=sum1;
circle=c1;
end
circle,sum
展开
 我来答
tianxiawulang
2015-06-01 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2655万
展开全部

看上去这是两段程序:第一部分是定义函数floyd,第二部分从【clc,clear】开始,是一个脚本。

 

但第二部分显然也存在问题:

1、一开始就调用floyd,而且没有输入参数,这显然不对。

2、后面一行只有一个 a,照理说这个很可能是要给a赋值的。

3、调用floyd没有返回任何参数,这也不合常理。

 

至于说怎么改,要看这段代码到底要干什么,否则,数据不知道是什么,也不知道要达到什么目的,乱改有什么意义?

 

如果只是想要能够运行起来,可以把

floyd
a;%输入数据

改成

a = rand(25);
floyd(a)

程序可以运行。

追问
程序的目的是在九个点之间,从第一个点出发,所有的点都经过一次,且每个点都只经过一次,最后回到第一个点的遍历方法和最短路径。
钺联昱M
2015-06-01 · TA获得超过706个赞
知道小有建树答主
回答量:1789
采纳率:33%
帮助的人:902万
展开全部
floyd不正确 需要有输入变量和输出变量的
追问
请问怎么改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式