Re: пара задач

From
Andrew Ezhguroff ()
To
Alexander Lunkov
Date
2002-09-14T19:21:40Z
Area
RU.ALGORITHMS
From: "Andrew Ezhguroff" <eandr@com2com.ru>

Привет! "Alexander Lunkov" <Alexander.Lunkov@p26.f201.n5055.z2.fidonet.org>
сообщил(а):

 AL>     Я занимаюсь не тем, чем нужно? Как построить необходимую мне
 AL> матрицу?

Проще всего - в лоб:

// Буфер, в который записывается матрица
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;
}

 AL>     2. Дано бесконечно шахматное поле. Как найти минимальное число
 AL> ходов, для перехода коня из (x1, y1) в (xn, yn)?

Обычным волновым алгоритмом. Только берем не соседние поля, а расположенные
буквой Г.

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



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