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)