矩阵A
包含不同坐标中的1:
A =
1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 0 1
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
第1步: 找到1的坐标。例如,在第一行中它是(1,1)和(1,5)。
c1 = find(A==1)
第2步:
在Main M
矩阵中扫描此坐标并执行AND操作。如果答案为1,则将1放在A
矩阵的相应坐标中。例如,(1,1) (1,5)
矩阵中的M
与(2,1)(2,5)==> 1 1 ANDed 0 0 ==>0 0
进行AND运算。同样在(3,1) (3,5)
矩阵中(10,1) (10,5)
到M
。如果任何地方1,它将1放在A
矩阵中的相应坐标位置。
M =
1 0 0 0 1 1 1 1 1 1
0 1 0 0 0 1 1 1 1 1
0 0 1 0 1 1 1 1 1 1
0 0 0 1 0 0 0 0 1 1
1 0 1 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 1 1
1 1 1 0 0 0 1 0 1 1
1 1 1 0 0 0 0 1 0 0
1 1 1 1 0 1 1 0 1 0
1 1 1 1 0 1 1 0 0 1
此处在第4行A
矩阵的给定矩阵中,1(4,4)检查M
矩阵中的剩余坐标。它与(1,4)和(2,4)进行正比,而(9,4)则为1.将1放在A
矩阵(4,9)中。我已尝试使用代码,但它不适用于通用情况。
a = 1:size(M)
R1 = 1;
for j = 1:size(A)
A1 = A(j,:)
c = find(A1==1) % finding 1's place
l = length(c)
a1 = a(a~=j)
for k = a1(1):a1(end)
R1 = 1;
for i = 1:l1
temp1 = R1
R1 = and(M(j,c(i)),M(k,c(i))) % performing AND operations
R2 = and(R1,temp1)
end
if (R2==1) % if the condition is satisfied by 1
A(j,k)=1 % place the 1 in the particular coordinate in A matrix
end
end
end
New_A = A
New_A =
1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 0 1
0 0 0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1 0 0
答案 0 :(得分:0)
如果我理解了您的问题,那么对于r
的每一行A
,您要提取M
所有A(r,:)==1
列,然后将1
放入c
的第一列A(r,:)
,即提取的c
中行M
中的所有列均为1.使用更新的A
继续同一行上的过程直到你到达终点,然后移到下一行。
这是一个代码(假设size(A,1)==size(M,2)
):
new_A = A; % copy the current state
for r = 1:size(new_A,1)
Mc = M(:,new_A(r,:)==1).'; % extract the relevat columns in new_A
c = 1; % column counter
while c<=size(A,2)
next_item = find(all(Mc(:,c:end),1),1)+c-1; % find the next item to change
new_A(r,next_item) = 1; % if all rows in Mc are 1, then place 1
Mc = M(:,new_A(r,:)==1).'; % extract the relevat columns in new_A
c = c+1; % go to the next column
end
end
导致new_A
使用您上方的A
和M
:
new_A =
1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 0 1
0 0 0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1 0 0
这是你要找的吗?