作业帮 > 综合 > 作业

刚学matlab,求教matlab大神

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/02 17:59:15
刚学matlab,求教matlab大神
有10个点,上面等于0的表示待连接线路,(10,1)、(1,3)已连接,在剩下的几条待建线路中选几条连接,使10个点连成辐射状,输出结果为:1表示连接,0表示不连(只考虑待建线路).怎么加了if语句限制后输出不了了
a=[3,10];
b=[2,4,5,6,7,8,9];
c=ones(10,10);
c(10,1)=0;
c(1,3)=0;
c(10,2)=0;
c(2,4)=0;
c(3,5)=0;
c(8,3)=0;
c(8,7)=0;
c(6,7)=0;
c(9,4)=0;
c(5,7)=0;
c(4,5)=0;
c(9,6)=0;
c(5,6)=0;
c(4,8)=0;
c(4,3)=0;
c(6,10)=0;
for i=1:10
for j=1:10
c(i,j)=c(j,i);
end
end
while length(b)>0
a=a(randperm(length(a)));
b=b(randperm(length(b)));
a(1);
b(1);
if c(a(1),b(1))==1
c(a(1),b(1))=1;
a=[a,b(1)];
b(1)=[];
end
end
c
刚学matlab,求教matlab大神
你这个循环最后剩下一个b中的元素等于5的时候c(a(1),5)是等于1的,也就是那个if逻辑是0不能执行以后的命令,所以后面b(1)=[];永远无法执行,b的长度就不会为0,最后陷入死循环了
再问: “你这个循环最后剩下一个b中的元素等于5的时候c(a(1),5)是等于1的‘’
菜鸟不是很懂,能给出个正确程序不?
再答: 我有点不太懂你的意思,你是说1表示连接,0表示不连接,(10,1)、(1,3)已连接,但是赋值的时候你又把这两个赋值成了0.
再问: 奥,那把这两个赋值改为1,但输出怎么解决
再答: 如果你只要一个输出,那么你在程序运行的时候在命令窗口按ctrl+c停止程序运行,这时候得c矩阵就已经是你想要的了。当然,前提是你前面的程序确实是按照你想要的编的,或者你在while那边改成while length(b)>1