Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизАлгоритм Найти похожие ветки
← →
User_OKA (2007-03-21 08:36) [0]Нужен алгоритм обхода матрицы с центра по часовой стрелке.
← →
MBo © (2007-03-21 08:51) [1]массив смещений по x и по y ((1,0)(0,1)(-1,0)(0,-1))
один шаг с первыми смещениями, один со вторыми
два с третьими, два с четвертыми
три с первыми... и т.д.
← →
Romkin © (2007-03-21 11:29) [2]Есть только обход с периферии :) Точнее, два :)
type
TMatrix = array of array of integer;
TVector = array of integer;
function GetSpiralLeftRight(M: TMatrix): TVector; //Разложение по спирали
var
i, j, k: integer;
Lowi, Hii, Lowj, Hij: integer;
begin
Result := nil;
if Length(M) = 0 then
exit;
SetLength(Result, Length(M)*Length(M[0]));
Lowi := 0;
Lowj := 0;
Hii := High(M);
Hij := High(M[0]);
k := 0;
while (Lowi <= Hii) or (Lowj <= Hij) do
begin
//строка
for j := Lowj to Hij do
begin
Result[k] := M[Lowi, j];
inc(k);
end;
inc(Lowi);
//столбец
for i := Lowi to Hii do
begin
Result[k] := M[i, Hij];
inc(k);
end;
dec(Hij);
//обратно строка
for j := Hij downto Lowj do
begin
Result[k] := M[Hii, j];
inc(k);
end;
dec(Hii);
//Обратно столбец
for i := Hii downto Lowi do
begin
Result[k] := M[i, Lowj];
inc(k);
end;
inc(Lowj);
end;
end;
function GetSpiralUpDown(M: TMatrix): TVector; //Разложение по спирали
var
i, j, k: integer;
Lowi, Hii, Lowj, Hij: integer;
begin
Result := nil;
if Length(M) = 0 then
exit;
SetLength(Result, Length(M)*Length(M[0]));
Lowi := 0;
Lowj := 0;
Hii := High(M);
Hij := High(M[0]);
k := 0;
while (Lowi <= Hii) or (Lowj <= Hij) do
begin
//столбец
for i := Lowi to Hii do
begin
Result[k] := M[i, Lowj];
inc(k);
end;
inc(Lowj);
//строка
for j := Lowj to Hij do
begin
Result[k] := M[Hii, j];
inc(k);
end;
dec(Hii);
//Обратно столбец
for i := Hii downto Lowi do
begin
Result[k] := M[i, Hij];
inc(k);
end;
dec(Hij);
//обратно строка
for j := Hij downto Lowj do
begin
Result[k] := M[Lowi, j];
inc(k);
end;
inc(Lowi);
end;
end;
← →
User_OKA (2007-03-21 15:22) [3]Спасибо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c