Re: Змейка

From
Andrew Ezhguroff ()
To
Oleg Zhigalov
Date
2002-11-13T03:17:09Z
Area
RU.ALGORITHMS
From: "Andrew Ezhguroff" <eandr@com2com.ru>

Привет! "Oleg Zhigalov" <Oleg.Zhigalov@p11.f73.n5054.z2.fidonet.org>
сообщил(а):

 OZ> буду очень пpизнателен кто поделится алгоpитмом по заполнению 2х меpной
 OZ> матpицы по спиpали (можно из центpа либо из внешних гpаней)
 OZ> p/s/ pазмеp матpицы динамический

Исходник, который делался для сходной задачи (квадратная матрица, заполнение
снаружи к центру):

// Буфер, в который записывается матрица
int Matrix[100][100];

// Таблица приращений x и y для 4-х направлений
int Delta[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

// Генерация матрицы
void Gen_Matrix(int N){
  int x=0;
  int y=0;
  int Count = 1;

  // Последовательно заполняем квадраты, начиная с наружнего
  for(int Len=(N-1); Len>0; Len-=2){
    // Заполняем очередной квадрат
    for(int Index=0; Index<4; Index++){
      for(int Tmp=0; Tmp<Len; Tmp++){
        Matrix[y][x]=Count;
        y+=Delta[Index][0];
        x+=Delta[Index][1];
        Count++;
      }
    }
    // Переходим к следующему квадрату
    x++;
    y++;
  }
  // Если размер нечетный, заполняем центральное поле
 if(Count==N*N)Matrix[y][x]=Count;
}

С уважением, Андрей.


-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)