|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.10.2008, 17:16 | #1 |
Регистрация: 07.10.2008
Сообщений: 3
|
Решение задачи про ферзей
Помогите решить задачу про ферзей!
На доске NxN ужно разместить N ферзей так чтобы они не били один другого!То есть не находились на одной вертикали, горизонтали или диагоналях! Delphi - Object Pascal Решение уже есть но нужно чтобы считало быстрее! Для 15 ферзей меньше 20 сек Помогите [code] program ferz; {$APPTYPE CONSOLE} uses SysUtils; type Tmasiv = Array of word; var N : integer; Rez: Extended; M : Tmasiv; tim : Double; t: word; function Ferz(x,y: word) : Boolean; var i: word; begin i:=1; while (i < x) and (y <> M[i]) and (abs(x - i) <> abs(y - M[i])) do inc(i); Ferz := i=x; end; procedure Go(x: word); var y : word; begin if x=1 then begin if odd(n)=false then t:=round(n/2); if odd(n)=true then t:=round((n-1)/2+1); for y := 1 to t do if Ferz(1, y) then begin M[1] := y; Go(x+1); end; end else for y := 1 to N do if Ferz(x, y) then begin M[x] := y; if x = N then begin if (odd(n)=true) and (m[1]=t) then rez:=rez+1/2 else Rez:=rez+1; end; Go(x+1); end; end; begin Readln(N); SetLength(M,N); tim:=Now; Rez := 0; Go(1); Writeln(Rez*2:8:0); Writeln(TimeToStr(Now-tim)); Readln; end. [code] Последний раз редактировалось yuran80; 07.10.2008 в 17:24. Причина: А вот и код |
08.10.2008, 09:33 | #2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Можно сделать < 20 сек., если учесть симметрию.
Я не стал разбираться с Вашим кодом - написал свой. Вот исходный вариант: Код:
|
08.10.2008, 09:35 | #3 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Теперь на первом уровне учтем осевую симметрию:
Код:
|
08.10.2008, 12:27 | #4 |
Регистрация: 07.10.2008
Сообщений: 3
|
Спасибо
Но у меня пишет ошибку, что незнает getTickCount!
Задача нужна для делфи! |
08.10.2008, 12:52 | #5 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
|
08.10.2008, 12:59 | #6 |
Регистрация: 07.10.2008
Сообщений: 3
|
Да спасибо! Это я что-то напутал!Извини! Голова не варит, целую ночь проги писал!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Си - Решение задачи про многоугольник и точку | andreas | Помощь студентам | 1 | 27.05.2008 19:29 |
Решение задачи на c++ | JOFRIF | Помощь студентам | 2 | 21.04.2008 00:35 |
Решение задачи на Си | kisha | Общие вопросы C/C++ | 9 | 19.11.2007 23:31 |
решение задачи | TuNeR | Microsoft Office Excel | 2 | 15.10.2007 09:31 |