Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Расстановка фигур на доске   Найти похожие ветки 

 
Ricks ©   (2004-03-17 13:21) [0]

Здраствуйте! Мне задали неделю назад задачу. До сих пор не могу её сделать. Задача такая: расставить на шахматной доске ладьи всеми возможными способами так чтобы они не били друг-друга. Использую при этом рекурсию. Помогите пожайлуста.


 
Алхимик ©   (2004-03-17 13:25) [1]

Яндекс, найдётся всё!
http://golovolomka.hobby.ru/books/gik/03.shtml


 
Ricks ©   (2004-03-17 13:45) [2]

Спасибо. Я почитал, что-то там не очень понятно.
Я в принципе представляю как сделать, но не получается!
Может, кто-нибудь еще что либо подскажет?


 
ssk   (2004-03-17 13:48) [3]

сколько ладей надо расставить? восемь?


 
Ricks ©   (2004-03-17 13:52) [4]

Да, и это, как я прочитал можно сделать 8!=40320 способами. А у меня находило то 62 то 106 тысяч :-(


 
Sphinx ©   (2004-03-17 13:54) [5]

> Ricks ©   (17.03.04 13:45) [2]

Видел в одной книжке по программированию в магезине алгоритм расстановки ферьзей с теми же условиями, но вот книгу не запомнил. Поищите на прилавках магазинов в Вашем городе, может найдете. Алгоритм очень подробно описан был.

Ай да, чуть не забыл, книга по Басику была, по простому, не по Вижуал, и алгоритм тоже на Басике.


 
Ricks ©   (2004-03-17 14:03) [6]

Нее... это же не серьёзно.


 
ssk   (2004-03-17 14:16) [7]

вот один (не лучший) способ: создать массив 8х8 и сдвигать в его строках символы на одну позицию и после каждого сдвига проверять, не бьют ли ладьи друг друга. все делать в рекурсии. т.е.


10000000
10000000
10000000
10000000
10000000
10000000
10000000
10000000
10000000


проверяем, не бьют ли лади друг друга. если бьют, крутим дальше, иначе увеличиваем счетчик и/или записываем позицию в файл.

потом сдвиг

01000000
10000000
10000000
10000000
10000000
10000000
10000000
10000000
10000000


проверка и т.д.

пока не доберемся до комбинации

00000001
00000001
00000001
00000001
00000001
00000001
00000001
00000001


вот и все.


 
MBo ©   (2004-03-17 14:55) [8]

В Win9X Memo столько строчек не возьмет, на RichEdit надо заменить.

procedure TForm1.Button9Click(Sender: TObject);

 procedure TakeNext(AvailPos, PrevPos: string);
 var
   i, l: Integer;
   CurrChar: Char;
 begin
   l := Length(AvailPos);
   CurrChar := Chr(Ord("a") + 8 - l);
   if l = 1 then begin
     Memo1.Lines.Add(PrevPos + CurrChar + AvailPos);
     Exit;
   end;
   for i := 1 to l do
     TakeNext(Copy(AvailPos, 1, i - 1) + Copy(AvailPos, i + 1, l - i),
       PrevPos + CurrChar + AvailPos[i] + " ");
 end;

begin
 Memo1.Lines.BeginUpdate;
 TakeNext("12345678", "");
 Memo1.Lines.EndUpdate;
 Memo1.Lines.Add(IntToStr(Memo1.Lines.Count));
end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
7-1073810584
TankMan
2004-01-11 11:43
2004.04.04
На счет бут сектора...


3-1078726512
dimm
2004-03-08 09:15
2004.04.04
Уважаемые мастера помогите реализовать быстрый поиск в базе данны


11-1058013131
Siliks
2003-07-12 16:32
2004.04.04
или  глупый или.... (ошибка в KOL RichEdit)


8-1070004089
user
2003-11-28 10:21
2004.04.04
Как удалить определенное кол-во секунд из .wav файла


6-1074962960
kor@l
2004-01-24 19:49
2004.04.04
Browser