我做了一个循环来跟踪循环开关。
C = zeros(i,2);
for q=1:i
if any(A(q,:)~= K(q,:))
%Save the row at which B is different(aka Ending Position)
C(q,2) = q;
for a=1:i
if A(a,:) == K(q,:)
C(q,1) = a;
end;
end
end
end
A
和B
是两个矩阵。 C
是存储交换机的那个。但由于某种原因,C
的最后一行有一个3,这是不应该发生的,因为[2 3 1] = [2 3 1]
A =
1 3 1
3 2 1
2 3 1
K =
3.0000 2.0000 1.0000
1.0000 3.0000 1.0000
2.0000 3.0000 1.0000
C =
2 1
1 2
0 3
答案 0 :(得分:1)
看一下这句话:
if A(a,:) == K(q,:)
C(q,1) = a;
end
如果A(a,:)
和K(q,:)
之间的所有元素都为真,我怀疑您只希望发生此声明。因此,您必须使用all
命令来确保这是真的。通过省略all
,如果这两个向量之间至少有一个元素为真,则此语句为真,这解释了意外行为。就这样:
if all(A(a,:) == K(q,:))
C(q,1) = a;
end
使用您的示例输入,这是我为C
获得的:
C =
2 1
1 2
0 0
最后一行[0 0]
表示A
和K
之间的第三行相同且未交换,因为C
的最后一行没有分配任何内容在那个循环中。