Методы обхода матриц

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску

Общий код:

const
  N = 10;

var
  A: array [1..N, 1..N] of integer;

function Predicate(i, j: integer) := {описание предиката};

begin
  for var i := 1 to N do
    for var j := 1 to N do
      if Predicate(i, j) then
        A[i, j] := 1;
end.

Предикаты, приведенные ниже в таблице, не являются оптимизированными.

Метод Код предиката
Обход по «периметру»
(i = 1) or (i = N) or (j = 1) or (j = N)
Обход по диагоналям
(i = j) or (i + j = N + 1)
Обход в виде «песочных часиков»
(i + j <= N + 1) and (i <= j) or (i + j >= N + 1) and (i >= j)
Обход ромбом
(i + j > N + 1 - N div 2) and (i + j <= N + 1 + N div 2) and (i >= j - N div 2) and (i <= j + N div 2);