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 展开
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 展开
2个回答
展开全部
看上去这是两段程序:第一部分是定义函数floyd,第二部分从【clc,clear】开始,是一个脚本。
但第二部分显然也存在问题:
1、一开始就调用floyd,而且没有输入参数,这显然不对。
2、后面一行只有一个 a,照理说这个很可能是要给a赋值的。
3、调用floyd没有返回任何参数,这也不合常理。
至于说怎么改,要看这段代码到底要干什么,否则,数据不知道是什么,也不知道要达到什么目的,乱改有什么意义?
如果只是想要能够运行起来,可以把
floyd
a;%输入数据
改成
a = rand(25);
floyd(a)
程序可以运行。
追问
程序的目的是在九个点之间,从第一个点出发,所有的点都经过一次,且每个点都只经过一次,最后回到第一个点的遍历方法和最短路径。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询