求下面矩阵的算法(100分)

  • 主题发起人 主题发起人 RJU
  • 开始时间 开始时间
R

RJU

Unregistered / Unconfirmed
GUEST, unregistred user!
如下的矩阵, Row =3, Colum =4,
1 2 3 4
10 11 12 5
9 8 7 6

当Row ,Column 为变量的时候,求填充这个矩阵的算法
 
用动态数组可以实现
定义一个动态数组,以Row,Column分配内存空间,然后循环填充即可
具体算法需要将需求描述更清晰一些,比如一个4*5的矩阵排列
 
我想得到的是一个回旋矩阵.不知道具体的填充算法应该如何实现
 
先从1到2*m+2*n-4填充m*n的外围
然后再继续填充(m-2)*(n-2)直到其中一维小于等于2,这样就可以完全填充了
这是基本算法。
具体实现就很简单了。
 
昨天写了一个玩玩,可以实现.
procedure TForm1.Button2Click(Sender: TObject);
var
dd: array of array of integer;
i, j, rows, cols,rowe,cole, len: integer;
str: string;
count: integer;
iflag: integer
//±êʶ·½Ïò
begin
rows := strtoint(trim(edit1.Text));
cols := strtoint(trim(edit2.Text));
rowe:=1;
cole:=0;
setlength(dd, rows, cols);
len := rows * cols;
{for i := 0 to rows - 1 do
begin
str := '';
for j := 0 to cols - 1 do
begin
dd[j] := i*cols+j;
str := str + inttostr(dd[j]) + ' ';
end;
memo1.Lines.Add(str);
end
}
memo1.Lines.Add('-----------------------');
count := 1;
i := 0;
j := 0;
iflag := 1;
//1表示向右,2表示向下,三表示向左,四表示向上
while count <= len do
begin
dd[j] := count;
case iflag of
1:
begin
if (j = cols - 1) then
begin
iflag := 2;
cols := cols - 1;
i := i + 1;
end
else
j := j + 1;
end;
2:
if (i = rows - 1) then
begin
iflag := 3;
rows := rows - 1;
j := j - 1;
end
else
i := i + 1;
3:
if (j=cole) then
begin
cole:=cole+1;
iflag:=4;
i:=i-1;
end
else
j:=j-1;
4:
if (i=rowe) then
begin
iflag:=1;
rowe:=rowe+1;
j:=j+1;
end
else
i:=i-1;
end;
count := count + 1;
end;
for i := 0 to strtoint(trim(edit1.Text))-1 do
begin
str := '';
for j := 0 to strtoint(trim(edit2.Text))-1 do
begin
str := str + inttostr(dd[j]) + ' ';
end;
memo1.Lines.Add(str);
end;
memo1.Lines.Add('-----------------------');
end;
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
777
DelphiTeacher的专栏
D
D
回复
0
查看
633
DelphiTeacher的专栏
D
D
回复
0
查看
767
DelphiTeacher的专栏
D
D
回复
0
查看
809
DelphiTeacher的专栏
D
后退
顶部