Re: Обход доски шахматным конем
- From
- Andrew Ezhguroff ()
- To
- Roman Zhelnov
- Date
- 2002-07-22T23:36:56Z
- Area
- RU.ALGORITHMS
From: "Andrew Ezhguroff" <eandr@com2com.ru>
Привет! "Roman Zhelnov" <Roman.Zhelnov@p29.f25.n5053.z2.fidonet.org>
сообщил(а):
RZ> Интересует алгоритм обхода доски шахматным конем. На одну клетку
RZ> можно вставать только один раз...
Если в лоб и рекурсивно, то, например, так:
#include <stdio.h>
#define Len 8
char Tab[Len][Len];
char Res[Len*Len][3];
int Gen(int X, int Y, int Num){
if(X<0||X>=Len||Y<0||Y>=Len||Tab[X][Y])return 0;
Tab[X][Y]=1;
if((++Num==Len*Len)||
Gen(X-1, Y-2, Num)||Gen(X-1, Y+2, Num)||
Gen(X+1, Y-2, Num)||Gen(X+1, Y+2, Num)||
Gen(X-2, Y-1, Num)||Gen(X-2, Y+1, Num)||
Gen(X+2, Y-1, Num)||Gen(X+2, Y+1, Num)){
Res[--Num][0]=X+'A';
Res[ Num][1]=Y+'1';
return 1;
}
Tab[X][Y]=0;
return 0;
}
int main(void){
if(Gen(0, 0, 0)){
for(int i=0; i<Len*Len; i++)printf("%3s", Res[i]);
}else{
printf("Ответа нет");
}
}
С уважением, Андрей.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: Talk.Mail.Ru (2:5020/400)