问题:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位。上一行溢出时,上上一行的1移动一位,以此类推,,直到第一列的1全部移动到最后一列停止。
编写工具:MATLAB R2015b 32位
代码:
function CyclicShift(input)
[lineNum,rowNum]=size(input);
counters=zeros(1,lineNum);
while(size(find(input(:,rowNum)==1),1)~=lineNum)
input=ElementShift(lineNum,input,rowNum);
counters(lineNum)=counters(lineNum)+1;
for iLine=lineNum:-1:2
flag=0;
if counters(iLine)==rowNum
flag=1;
counters(iLine)=0;
input=ElementShift(iLine-1,input,rowNum);
counters(iLine-1)=counters(iLine-1)+1;
end
if flag==0
break;
end
end
end
end
function B=ElementShift(lineID,B,M)
index=find(B(lineID,:)==1);
if index==M
B(lineID,index)=0;
B(lineID,1)=1;
else
B(lineID,index)=0;
B(lineID,index+1)=1;
end
end
未完 ......
点击访问原文(进入后根据右侧标签,快速定位到本文)