Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Алгоритм   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.218 c
4-1162553030
мах
2006-11-03 14:23
2007.04.08
Не видно окна программы


15-1173877429
eXPell
2007-03-14 16:03
2007.04.08
Ребят, выручайте))) (Re: Свойства фото)


2-1174377014
DimonS
2007-03-20 10:50
2007.04.08
Имя пользователя из-под Delphi


6-1161452263
_stdcall
2006-10-21 21:37
2007.04.08
Разборка FLAP пакетов.


2-1174408150
MIV
2007-03-20 19:29
2007.04.08
Исходный код