Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Задача о расстановке ферзей / QUEEN95 / QUEEN / QEEN
.TXT1 ‡Ђ„Ђ—Ђ.
ђ ббв ўЁвм и е¬ в®© ¤®бЄҐ а §¬Ґа N N, N дҐа§Ґ© в Є,
зв®Ўл Ё ®¤Ё дҐа§м Ґ гЈа®¦ « ¤агЈ®¬г.
ЏаЁ¬Ґа:
®¬Ґа Ј®аЁ§®в «Ґ©
і
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
1 і * і я ія і і і і ія і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
2 і і і і і і і * і і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
3 і і я ія і і * і і ія і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
4 і і і і і і і і * і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
5 і і * ія і і і і ія і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
6 і і і і * і і і і і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
7 і і я ія і і і * і ія і
ГДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДЕДДДґ
8 і і і * і і і і і і
АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
1 2 3 4 5 6 7 8 - ®¬Ґа ўҐавЁЄ «Ґ©
2 €„…€ Ђ‹ѓЋђ€’ЊЋ‚.
ђ бᬮваҐлҐ ў а Ў®вҐ аҐиҐЁп ®б®ў л «Ј®аЁв¬Ґ б ў®§ўа ⮬.
ЋЎй п б奬 «Ј®аЁв¬ Ї®ЁбЄ ўбҐе ў®§¬®¦ле аҐиҐЁ©:
procedure Queen ( i : integer );
{‘в ўЁ¬ i-Ј® дҐа§п ў i-го ўҐавЁЄ «м}
begin
ЁЁжЁЁа®ў вм ўлЎ®а Ї®§ЁжЁЁ ¤«п i-Ј® дҐа§п;
repeat
ўлЎа вм Ї®§ЁжЁо;
if ЎҐ§®Ї б® then
begin
Ї®бв ўЁвм дҐа§п;
if i < N then Queen ( i+1 )
else § ЇЁб вм аҐиҐЁҐ;
гЎа вм дҐа§п;
end
until Ґв Ў®«миҐ Ї®§ЁжЁ©;
end;
ђ §«ЁзЁҐ ¤ўге «Ј®аЁв¬®ў § Є«оз Ґвбп ў ⮬, Є Є ЇаҐ¤бв ўЁвм ¤ лҐ
® ⮬ Єг¤ ¬®¦® Ї®бв ўЁвм ®зҐаҐ¤®Ј® дҐа§п, Єг¤ Ґ«м§п.
Ђ«Ј1
•а Ёв Є ¦¤®¬ и ЈҐ ®¤г Ја Ёжг S [1..N] (в.Ґ. дҐа§п ¬®¦®
Ї®Їлв вмбп Ї®бв ўЁвм Ј®аЁ§®в «м ®в S ¤® N) Ё Ї®¤Ё¬ Ґв ҐҐ Ї®Є
Ґ Ї®«гзЁв S=N, в®Ј¤ Їа®Ёб室Ёв ў®§ўа в.
‚ н⮬ б«гз Ґ ¤«п в®Ј®, зв®Ўл Їа®ўҐаЁвм ¬®¦® «Ё Ї®бв ўвм ®зҐаҐ¤®Ј®
дҐа§п 㦮 ўҐагвбп Є® ўбҐ¬ 㦥 Ї®бв ў«Ґл¬.
Ђ«Ј2
•а Ёв ¬®¦Ґбвў® ў®§¬®¦ле Ї®§ЁжЁ© ў пў®¬ ўЁ¤Ґ ваҐ¬п ¬ ббЁў ¬Ё
H [1..N] § пв (false) Ј®аЁ§®в «м
D1[2..2*N] § пв (false) /-¤Ё Ј® «м
D2[1-N..N-1] § пв (false) \-¤Ё Ј® «м
‚ н⮬ б«гз Ґ ЇаўҐаЄ в®Ј® ¬®¦® «Ё Ї®бв ўЁвм ®ў®Ј® дҐа§п ¤®бв в®з®
Їа®бв .
‡ ¬ҐвЁ¬ зв® б।Ё Ї®«гзҐле аҐиҐЁ© Ґбвм ¬®Ј® бЁ¬¬ҐваЁзле ҐЄ®в®алҐ
Ё§ Ёе ¬®¦® ®вбҐзм, Ґб«Ё зЁ вм § Ї®«пвм ЇҐаўго ўҐавЁЄ «м б® ўв®а®©
Ј®аЁ§®в «Ё Ё в®«мЄ® ¤® бҐаҐ¤Ёл.
Џђ€Њ…—ЂЌ€…: Ђ«Ј2 а бᬮвॠў ЄЁЈҐ Ќ. ‚Ёав
"Ђ«Ј®аЁв¬л + бвагЄвЄвгал ¤ ле = Їа®Ја ¬¬л"
3 ЉЋЊЊ…Ќ’Ђђ€€ Љ ђЂЃЋ’….
Љ ®взҐвг ЇаЁ« Ј овбп Їа®Ј ବл 室пйЁҐбп ў ¤ЁаҐЄв®аЁЁ QUEEN.
Џа®Ја ¬¬л ॠ«Ё§®ў лҐ Ї® Ђ«Ј1 ў QUEEN95.
Џа®Ја ¬¬л ॠ«Ё§®ў лҐ Ї® Ђ«Ј2 ў QUEEN99.
‚ Є ¦¤®¬ Ё§ нвЁе ¤ЁаҐЄв®аЁҐў 室пвбп Їа®Ја ¬¬л б гзҐв®¬ ҐЄ®в®але
бЁ¬¬ҐваЁзле аҐиҐЁ© (QUEEN) Ё ЎҐ§ (QUEEN1).
‚ ¤ЁаҐЄв®аЁпе Ї®¤ §ў ЁҐ¬ MONTECAR 室пвбп Їа®Ја ¬¬л ®жҐЁў ойЁҐ
Є®«ЁзҐбвў® ў аЁ в®ў ЇҐаҐЎЁа Ґ¬ле ᮮ⢥вбвўгойЁ¬ «Ј®аЁв¬®¬.
ђ Ў®в ўбҐе Їа®Ја ¬¬ ®жҐЁў « бм Ї® ўаҐ¬ҐЁ १г«мв вл ®жҐ®Є
еа пвбп ў д ©« е б а биЁаҐЁҐ¬ (tab).
‚ аЁ вл аҐиҐЁ© ¤«п 8<=N<=14 еа пвбп ў д ©« е б а биЁаҐЁҐ¬ (dat).
4 ’ЂЃ‹€–› ђ…‡“‹њ’Ђ’Ћ‚ € ђ……Ќ€џ.
4.1 ’ЂЃ‹€–› ‘ђЂ‚Ќ…Ќ€џ ђ…‡“‹њ’Ђ’Ћ‚ ђЂЃЋ’› ЏђЋѓђЂЊЊ
ЌЂЏ€‘ЂЌЌ›• ЏЋ Ђ«Ј1 Ё Ђ«Ј2.
ђҐ§г«мв вл вҐбвЁа®ў Ёп Їа®Ја ¬¬л queen.pas Ё§ ...\QUEEN\QUEEN95\QUEEN\...
Ё ...QUEEN\QUEEN99\QUEEN\... ᮮ⢥вб⢥®.
Є®«ЁзҐбвў® дҐа§Ґ© -я n
Є®«ЁзҐбвў® 㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ - яN
Є®«ЁзҐбвў® ©¤Ґле аҐиҐЁ© -я nS
ўаҐ¬п аҐиҐЁп - яT Ё T1 ᮮ⢥вᢥ®
...\QUEEN\QUEEN95\QUEEN\... Ё ...QUEEN\QUEEN99\QUEEN\...
( б гзҐв®¬ бЁ¬¬ҐваЁЁ ҐЄ®в®але аҐиҐЁ© )
ЪДДДВДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДї
і n і яnS я ія N ія T і T1 і
ГДДДЕДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДґ
і 8 і 42і 801і 0 ¬Ё 0.06 ᥪі 0 ¬Ё 0.00 ᥪі
і і і і і і
і 9 і 121і 2 857і 0 ¬Ё 0.16 ᥪі 0 ¬Ё 0.06 ᥪі
і і і і і і
і10 і 298і 14 566і 0 ¬Ё 0.71 ᥪі 0 ¬Ё 0.11 ᥪі
і і і і і і
і11 і 1 069і 62 284і 0 ¬Ё 3.63 ᥪі 0 ¬Ё 0.50 ᥪі
і і і і і і
і12 і 6 600і 367 016і 0 ¬Ё 24.93 ᥪі 0 ¬Ё 2.91 ᥪі
і і і яі і і
і13 і 30 061і 1 840 253і 2 ¬Ё 20.17 ᥪі 0 ¬Ё 14.94 ᥪі
і і і і і і
і14 і170 906і12 075 381і - ія1 ¬Ё 39.47 ᥪі
і і і і ія і
АДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДЩ
ђҐ§г«мв вл вҐбвЁа®ў Ёп Їа®Ја ¬¬л queen1.pas Ё§ ...\QUEEN\QUEEN95\QUEEN1\...
Ё ...QUEEN\QUEEN99\QUEEN1\... ᮮ⢥вб⢥®.
Є®«ЁзҐбвў® дҐа§Ґ© -я n
Є®«ЁзҐбвў® 㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ - яN
Є®«ЁзҐбвў® ©¤Ґле аҐиҐЁ© -я nS
ўаҐ¬п аҐиҐЁп - яT Ё T1 ᮮ⢥вᢥ®
...\QUEEN\QUEEN95\QUEEN1\... Ё ...QUEEN\QUEEN99\QUEEN1\...
( ўбҐ аҐиҐЁп )
ЪДДДВДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДї
і n і яnS я ія N ія T і T1 і
ГДДДЕДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ
і 8 і 92і 2 056і 0 ¬Ё 0.11 ᥪі0 ¬Ё 0.06 ᥪі
і і і і і і
і 9 і 352і 8 393і 0 ¬Ё 0.38 ᥪі0 ¬Ё 0.11 ᥪі
і і і і і і
і10 і 724і 35 538і 0 ¬Ё 1.75 ᥪі0 ¬Ё 0.28 ᥪі
і і і і і і
і11 і 2 680і 166 925і 0 ¬Ё 9.45 ᥪі0 ¬Ё 1.21 ᥪі
і і і і і і
і12 і 14 200і 856 188і 0 ¬Ё 56.51 ᥪі0 ¬Ё 6.59 ᥪі
і і і яі і і
і13 і 73 712і 4 674 889і 5 ¬Ё 54.49 ᥪі0 ¬Ё 38.45 ᥪі
і і і і і і
і14 і365 596і27 358 552і - і3 ¬Ё 40.91 ᥪі
і і і і і і
АДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДЩ
я 4.2 ђ…‡“‹њ’Ђ’› ‘—…’Ђ € Ћ–…ЌЉ€ Њ…’Ћ„ЋЊ ЊЋЌ’…-ЉЂђ‹Ћ
Є®«ЁзҐбвў® дҐа§Ґ© -я n
Є®«ЁзҐбвў® 㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ - яN
Є®«ЁзҐбвў® ©¤Ґле аҐиҐЁ© -я nS
ўаҐ¬п аҐиҐЁп - яT
Є®«ЁзҐбвў® ЁбЇлв Ё© - яnExp
®жҐЄ Є®«ЁзҐб⢠㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ -я N^
ўаҐ¬п а Ў®вл Їа®Ја ¬¬л ®жҐЄЁ - яt
’ҐбвЁа®ў «Ёбм ЇаЈа ¬¬л ...\QUEEN\QUEEN95\QUEEN\...
ЪДДДВДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДВДДДДДДДДДї
і n і яnS я ія N ія T і N^ і nExp і t я і
ГДДДЕДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДґ
і 8 і 42і 801і 0 ¬Ё 0.06 ᥪі 812і 1000 і 0.17 ᥪі
і і і і і і і і
і 9 і 121і 2 857і 0 ¬Ё 0.16 ᥪі 2 899і 1000 і 0.22 ᥪі
і і і і і і і і
і10 і 298і 14 566і 0 ¬Ё 0.71 ᥪі 14 632і 1000 і 0.22 ᥪі
і і і і і і і і
і11 і 1 069і 62 284і 0 ¬Ё 3.63 ᥪі 60 549і 1000 і 0.33 ᥪі
і і і і і і і і
і12 і 6 600і 367 016і 0 ¬Ё 24.93 ᥪі 377 011і 1000 і 0.44 ᥪі
і і і яі і і і і
і13 і 30 061і 1 840 253і 2 ¬Ё 20.17 ᥪі 1 872 805і 1000 і 0.49 ᥪі
і і і і і і і і
і14 і - і - і - ія11 814 047і 1000 і 0.54 ᥪі
і і і і ія і і і
і15 і - і - і - і 68 186 811і 1000 і 0.66 ᥪі
і і і і і і і і
АДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДБДДДДДДДДДЩ
’ҐбвЁа®ў «Ёбм Їа®Ја ¬¬л ...\QUEEN\QUEEN95\QUEEN1\...
ЪДДДВДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДВДДДДДДДДДї
і n і яnS я ія N ія T і N^ і nExp і t я і
ГДДДЕДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДґ
і 8 і 92і 2 056і 0 ¬Ё 0.11 ᥪія 2 038і 1000 і 0.17 ᥪі
і і і і ія і і і
і 9 і 352і 8 393і 0 ¬Ё 0.38 ᥪія 8 312і 1000 і 0.22 ᥪі
і і і і ія і і і
і10 і 724і 35 538і 0 ¬Ё 1.75 ᥪія 37 881і 1000 і 0.27 ᥪі
і і і і ія і і і
і11 і 2 680і 166 925і 0 ¬Ё 9.45 ᥪія 161 948і 1000 і 0.33 ᥪі
і і і і ія і і і
і12 і 14 200і 856 188і 0 ¬Ё 56.51 ᥪія 849 387і 1000 і 0.38 ᥪі
і і і яі ія і і і
і13 і 73 712і 4 674 889і 5 ¬Ё 54.49 ᥪія 4 671 732і 1000 і 0.49 ᥪі
і і і і ія і і і
і14 і - і - і - і я28 439 200і 1000 і 0.60 ᥪі
і і і і ія і і і
і15 і - і - і - і 172 600 442і 1000 і 0.71 ᥪі
і і і і ія і і і
АДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДЩ
’ҐбвЁа®ў «Ёбм Їа®Ја ¬¬л ...\QUEEN\QUEEN99\QUEEN1\...
ЪДДДВДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДВДДДДДДДДДї
і n і яnS я ія N ія T і N^ і nExp і t я і
ГДДДЕДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДЕДДДДДДДДДґ
і 8 і 92і 2 056і 0 ¬Ё 0.06 ᥪія 2 040і 10000 і 0.83 ᥪі
і і і і ія і і і
і 9 і 352і 8 393і 0 ¬Ё 0.11 ᥪія 8 376і 10000 і 0.99 ᥪі
і і і і ія і і і
і10 і 724і 35 538і 0 ¬Ё 0.28 ᥪія 35 421і 10000 і 1.16 ᥪі
і і і і ія і і і
і11 і 2 680і 166 925і 0 ¬Ё 1.21 ᥪія 166 431і 10000 і 1.32 ᥪі
і і і і ія і і і
і12 і 14 200і 856 188і 0 ¬Ё 6.59 ᥪія 849 257і 10000 і 1.49 ᥪі
і і і яі ія і і і
і13 і 73 712і 4 674 889і 0 ¬Ё 38.45 ᥪія 4 605 375і 10000 і 1.71 ᥪі
і і і і ія і і і
і14 і365 596і27 358 552і 3 ¬Ё 40.91 ᥪі я27 282 972і 10000 і 1.92 ᥪі
і і і і ія і і і
і15 і - і - і - і 170 106 627і 10000 і 2.09 ᥪі
і і і і ія і і і
і16 і - і - і - і1 163 698 634і 10000 і 2.36 ᥪі
і і і і ія і і і
АДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДБДДДДДДДДДЩ
Џа®Ја ¬¬л вҐбвЁа®ў « бм 486\dx100.
4.3 ‚Ђђ€ЂЌ’› ђ……Ќ€‰.
Є®«ЁзҐбвў® дҐа§Ґ© = 8
а Ґ и Ґ Ё п :
1: 1 5 8 6 3 7 2 4
------------------------------
92: 8 4 1 3 6 2 7 5
Є®«ЁзҐбвў® дҐа§Ґ© = 9
а Ґ и Ґ Ё п :
1: 1 3 6 8 2 4 9 7 5
---------------------------------
352: 9 7 4 2 8 6 1 3 5
Є®«ЁзҐбвў® дҐа§Ґ© = 10
а Ґ и Ґ Ё п :
1: 1 3 6 8 10 5 9 2 4 7
-----------------------------------
724: 10 8 5 3 1 6 2 9 7 4
Є®«ЁзҐбвў® дҐа§Ґ© = 11
а Ґ и Ґ Ё п :
1: 1 3 5 7 9 11 2 4 6 8 10
-------------------------------------------
2680: 11 9 7 5 3 1 10 8 6 4 2
Є®«ЁзҐбвў® дҐа§Ґ© = 12
а Ґ и Ґ Ё п :
1: 1 3 5 8 10 12 6 11 2 7 9 4
------------------------------------------
14200: 12 10 8 5 3 1 7 2 11 6 4 9
Є®«ЁзҐбвў® дҐа§Ґ© = 13
а Ґ и Ґ Ё п :
1: 1 3 5 2 9 12 10 13 4 6 8 11 7
----------------------------------------------
73712: 13 11 9 12 5 2 4 1 10 8 6 3 7
Є®«ЁзҐбвў® дҐа§Ґ© = 14
а Ґ и Ґ Ё п :
1: 1 3 5 7 12 10 13 4 14 9 2 6 8 11
--------------------------------------------------
365596: 14 12 10 8 3 5 2 11 1 6 13 9 7 4
Џђ€Њ…—ЂЌ€…: ў а Ў®вҐ ЁбЇ®«м§ ў « бм Ј®в®ўлҐ Їа®Ја ¬¬л Є®в®алҐ
室пвбп ў ...\QUEEN\QUEEN95\QUEEN\....
5.ЏђЋѓђЂЊЊ›.
{===========================================================================}
Џа®жҐ¤гал Ё§¬ҐаҐЁп ўаҐ¬ҐЁ ®ЎйЁҐ ¤«п ўбҐе Їа®Ја ¬¬.
procedure MyGetTime ( var t : LongInt );
{ўл¤ Ґв ўаҐ¬п ў б®вле ¤®«пе ᥪг¤л}
var h, m, s , hund : Word;
begin
GetTime( h, m , s, hund);
t := s + 60 * m;
t := hund + 100 * t
end { MyGetTime };
procedure MyUnPackTime ( t: LongInt; var m, s, hund : Word );
{ЇҐаҐў®¤Ёв ўаҐ¬п t (ў б®вле ¤®«пе ᥪг¤л)
ў ¬Ёгвл m, ᥪг¤л s, б®влҐ hund }
begin
hund := t mod 100;
t := t div 100; {ў ᥪг е}
s := t mod 60;
m := t div 60
end { MyUnPackTime };
{==========================================================================}
QUEEN.PAS Ђ«Ј1
{Џа®Ја ¬¬ ®вᥨў ой п ҐЄ®в®алҐ ў аЁ вл бЁ¬¬ҐваЁзле аҐиҐЁ©.}
program queen_;
Uses Dos;
const maxN = 20;
type Nat = 1..maxN;
var n : Nat;
fout : Text;
t, t1,t2 : LongInt;
min, sec, s100 : Word;
procedure Queen( n : Nat );
type Nat0 = 0..maxN;
Nat1 = 1..maxN+1;
pos = array [Nat] of Nat1;
var k : Nat0;
i : Nat;
a, s : pos; { s[k] - Ё¬ҐмиЁ© н«Ґ¬Ґв ¬®¦Ґбвў Sk }
{ Ґ®Їа®Ў®ў ле (¤®ЇгбвЁ¬ле) § 票© }
count : Longint; { бзҐвзЁЄ ®Ўб«Ґ¤®ў ле 㧫®ў ¤ҐаҐў Ї®ЁбЄ }
countS : Longint; { бзҐвзЁЄ ©¤Ґле аҐиҐЁ© }
n_div_2 : Nat0;
function NoQueen : Boolean;
{ NoQueen = 'дҐа§м Ґ ¬®¦Ґв Ўлвм Ї®бв ў«Ґ ў бва®Єг s[k] бв®«Ўж k' }
var Flag : Boolean;
i : Nat;
begin {NoQueen}
Flag := True;
i := 1;
while (i<k) and Flag do
begin { Flag='дҐа§Ё [1..i) Ґ в Єгов Ї®«Ґ <k,s[k]>'}
{ в ЄгҐв «Ё дҐа§м Ё§ i-Ј® бв®«Ўж Ї®«Ґ <k,s[k]>?}
Flag := not ( (a[i]=s[k]) or (abs(a[i]-s[k])=k-i) );
i := i+1
end {while};
NoQueen := not Flag
end {NoQueen};
procedure RestSk;
{ ©вЁ б«Ґ¤го饥 Ё¬Ґм襥 § 票Ґ s[k],
зЁ п б ⥪г饣® s[k]; Ґб«Ё в Є®ў®Ј® Ґв, в® s[k]=n+1 }
begin
while (s[k]<=n) and NoQueen do s[k] := s[k] + 1
end {RestSk};
begin{Queen}
a[1] := 2; s[1] := 3;
k := 2; s[2] := 4;
count := 1; countS := 0; n_div_2 := n div 2;
while k>0 do
begin
while (k>1) and (s[k]<=n) or (k=1) and (s[1]<=(n_div_2)) do
begin
a[k] := s[k];
s[k] := s[k] + 1;
RestSk;
count := count + 1;
if k=n then
begin { аҐиҐЁҐ ©¤Ґ® }
countS := countS + 1; Write(fout,countS:5,' :: ');
for i:=1 to n do Write(fout, a[i]:3); WriteLn(fout)
end { дЁЄб жЁЁ аҐиҐЁп }
else
begin { ЇҐаҐе®¤ Є б«Ґ¤го饩 ўҐавЁЄ «Ё }
k := k + 1;
s[k] := 1;
RestSk
end {if}
end {while};
k := k-1 {backtrack}
end {while};
WriteLn(fout,'ўбҐЈ® ўҐаиЁ = ',count)
end {Queen};
begin
WriteLn(' n=?'); ReadLn(n);
Assign(fout,'QOUT.DAT');
Rewrite{Append}(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'а Ґ и Ґ Ё п :');
MyGetTime(t1);
Queen ( n );
MyGetTime(t2);
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
if(s100<10)
then WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}
QUEEN1.PAS Ђ«Ј1
{ Ї®ЁбЄ ўбҐе аҐиҐЁ© }
program queen_;
Uses Dos;
const maxN = 20;
type Nat = 1..maxN;
var n : Nat;
fout : Text;
t, t1,t2 : LongInt;
min, sec, s100 : Word;
procedure Queen( n : Nat );
type Nat0 = 0..maxN;
Nat1 = 1..maxN+1;
pos = array [Nat] of Nat1;
var k : Nat0;
i : Nat;
a, s : pos; { s[k] - Ё¬ҐмиЁ© н«Ґ¬Ґв ¬®¦Ґбвў Sk }
{ Ґ®Їа®Ў®ў ле (¤®ЇгбвЁ¬ле) § 票© }
count : Longint; { бзҐвзЁЄ ®Ўб«Ґ¤®ў ле 㧫®ў ¤ҐаҐў Ї®ЁбЄ }
countS : Longint; { бзҐвзЁЄ ©¤Ґле аҐиҐЁ© }
function NoQueen : Boolean;
{ NoFerz = 'дҐа§м Ґ ¬®¦Ґв Ўлвм Ї®бв ў«Ґ ў бва®Єг s[k] бв®«Ўж k' }
var Flag : Boolean;
i : Nat;
begin {NoFerz}
Flag := True;
i := 1;
while (i<k) and Flag do
begin { Flag='дҐа§Ё [1..i) Ґ в Єгов Ї®«Ґ <k,s[k]>'}
{ в ЄгҐв «Ё дҐа§м Ё§ i-Ј® бв®«Ўж Ї®«Ґ <k,s[k]>?}
Flag := not ( (a[i]=s[k]) or (abs(a[i]-s[k])=k-i) );
i := i+1
end {while};
NoQueen := not Flag
end {NoQueen};
procedure RestSk;
{ ©вЁ б«Ґ¤го饥 Ё¬Ґм襥 § 票Ґ s[k],
зЁ п б ⥪г饣® s[k]; Ґб«Ё в Є®ў®Ј® Ґв, в® s[k]=n+1 }
begin
while (s[k]<=n) and NoQueen do s[k] := s[k] + 1
end {RestSk};
begin{queen}
a[1] := 1; s[1] := 1;
k := 1;
count :=0; countS := 0;
while k>0 do
begin
while (k>=1) and (s[k]<=n) do
begin
a[k] := s[k];
s[k] := s[k] + 1;
RestSk;
count := count + 1;
if k=n then
begin { аҐиҐЁҐ ©¤Ґ® }
countS := countS + 1; Write(fout,countS:7,' :: ');
for i:=1 to n do Write(fout, a[i]:3); WriteLn(fout)
end { дЁЄб жЁЁ аҐиҐЁп }
else
begin { ЇҐаҐе®¤ Є б«Ґ¤го饩 ўҐавЁЄ «Ё }
k := k + 1;
s[k] := 1;
RestSk
end {if}
end {while};
k := k-1 {backtrack}
end {while};
WriteLn(fout,'ўбҐЈ® ўҐаиЁ = ',count)
end {Queen};
begin
WriteLn(' n=?'); ReadLn(n);
Assign(fout,'QOUT.DAT');
Rewrite{Append}(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'а Ґ и Ґ Ё п :');
MyGetTime(t1);
Queen ( n );
MyGetTime(t2);
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
if(s100<10)
then WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}
QUEEN.PAS Ђ«Ј2
{Џа®Ја ¬¬ ®вᥨў ой п ҐЄ®в®алҐ ў аЁ вл бЁ¬¬ҐваЁзле аҐиҐЁ©.}
Uses Dos,crt;
const MaxN=15;
type Nat=1..MaxN;
var
H:array[1..MaxN] of boolean; { § пв (false) Ј®аЁ§®в «м }
D1:array[2..2*MaxN] of boolean; { § пв (false) /-¤Ё Ј® «м }
D2:array[1-MaxN..MaxN-1] of boolean;{ § пв (false) \-¤Ё Ј® «м }
N:Nat; { а §¬Ґа ¤®бЄЁ(Є®«ЁзҐбвў® дҐа§Ґ©) }
X:array[1..MaxN] of Nat; { аҐиҐЁҐ }
fout:text; {ўл室®© д ©«}
{--------------------------------------------------------------------------}
t, t1,t2 : LongInt;
min, sec, s100 : Word;
countS, { Є®«ЁзҐбвў® аҐиҐЁ©(ЎҐ§ гзҐв бЁ¬¬ҐваЁЁ) }
count:Longint;{ Є®«ЁзҐбвў® ўҐаиЁ ў ¤ҐаҐўҐ }
n_div_2,j:integer;
{--------------------------------------------------------------------------}
procedure print;
{ ўлў®¤ аҐиҐЁп ў д ©«}
var k:Nat;
begin
countS:=countS+1;
write(fout,countS:8,':');
for k:=1 to N do write(fout,X[k]:3);
writeln(fout);
end{ print };
procedure Queen(i:Nat);
{ 室Ёв ўбҐ ў®§¬®¦лҐ аҐиҐЁп § ¤ зЁ (ЎҐ§ гзҐв бЁ¬¬ҐваЁЁ) }
var j:Nat;
begin
for j:=1 to N do
if H[j] and D1[i+j] and D2[i-j] then { ¬®¦® Ї®бв ўЁвм }
begin
X[i]:=j; count:=count+1;
H[j]:=false; D1[i+j]:=false; D2[i-j]:=false; { бв ўЁ¬ }
if i<N then Queen(i+1)
else print;
H[j]:=true; D1[i+j]:=true; D2[i-j]:=true; { гЎЁа Ґ¬ }
end;
end{ Ferz };
procedure Mass;
{ Ё§ з «м® ¬ ббЁўл Їгбвл(Ґв § пвле Ї®§ЁжЁ©) }
var i:integer;
begin
for i:=1 to N do H[i]:=true;
for i:=2 to 2*N do D1[i]:=true;
for i:=1-N to N-1 do D2[i]:=true;
end{ Mass };
begin
clrscr;
Write('‚ўҐ¤ЁвҐ а §¬Ґал ¤®бЄЁ (N):'); ReadLn(n);
Assign(fout,'QOut___.DAT');
Rewrite(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'а Ґ и Ґ Ё п :');
MyGetTime(t1);
count:=0; countS:=0; Mass;
n_div_2:=(n div 2);
for j:=2 to n_div_2 do
begin
X[1]:=j; count:=count+1;
H[j]:=false; D1[1+j]:=false; D2[1-j]:=false;
Queen(2);
H[j]:=true; D1[1+j]:=true; D2[1-j]:=true;
end;
MyGetTime(t2);
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
Writeln(fout,' ўбҐЈ® ўҐаиЁ = ',count);
if(s100<10)
then Write(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else Write(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}
QUEEN1.PAS Ђ«Ј2
{ Ї®ЁбЄ ўбҐе аҐиҐЁ© }
Uses Dos,crt;
const MaxN=15;
type Nat=1..MaxN;
var
H:array[1..MaxN] of boolean; { § пв (false) Ј®аЁ§®в «м }
D1:array[2..2*MaxN] of boolean; { § пв (false) /-¤Ё Ј® «м }
D2:array[1-MaxN..MaxN-1] of boolean;{ § пв (false) \-¤Ё Ј® «м }
N:Nat; { а §¬Ґа ¤®бЄЁ(Є®«ЁзҐбвў® дҐа§Ґ©) }
X:array[1..MaxN] of Nat; { аҐиҐЁҐ }
fout:text; {ўл室®© д ©«}
{--------------------------------------------------------------------------}
t, t1,t2 : LongInt;
min, sec, s100 : Word;
countS, { Є®«ЁзҐбвў® аҐиҐЁ©(ЎҐ§ гзҐв бЁ¬¬ҐваЁЁ) }
count:Longint;{ Є®«ЁзҐбвў® ўҐаиЁ ў ¤ҐаҐўҐ }
{--------------------------------------------------------------------------}
procedure print;
{ ўлў®¤ аҐиҐЁп ў д ©«}
var k:Nat;
begin
countS:=countS+1;
write(fout,countS:8,':');
for k:=1 to N do write(fout,X[k]:3);
writeln(fout);
end{ print };
procedure Queen(i:Nat);
{ 室Ёв ўбҐ ў®§¬®¦лҐ аҐиҐЁп § ¤ зЁ (ЎҐ§ гзҐв бЁ¬¬ҐваЁЁ) }
var j:Nat;
begin
for j:=1 to N do
if H[j] and D1[i+j] and D2[i-j] then { ¬®¦® Ї®бв ўЁвм }
begin
X[i]:=j; count:=count+1;
H[j]:=false; D1[i+j]:=false; D2[i-j]:=false; { бв ўЁ¬ }
if i<N then Queen(i+1)
else print;
H[j]:=true; D1[i+j]:=true; D2[i-j]:=true; { гЎЁа Ґ¬ }
end;
end{ Ferz };
procedure Mass;
{ Ё§ з «м® ¬ ббЁўл Їгбвл(Ґв § пвле Ї®§ЁжЁ©) }
var i:integer;
begin
for i:=1 to N do H[i]:=true;
for i:=2 to 2*N do D1[i]:=true;
for i:=1-N to N-1 do D2[i]:=true;
end{ Mass };
begin
clrscr;
Write('‚ўҐ¤ЁвҐ а §¬Ґал ¤®бЄЁ (N):'); ReadLn(n);
Assign(fout,'QOut.DAT');
Rewrite(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'а Ґ и Ґ Ё п :');
MyGetTime(t1);
count:=0; countS:=0; Mass;
Queen(1);
MyGetTime(t2);
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
Writeln(fout,' ўбҐЈ® ўҐаиЁ = ',count);
if(s100<10)
then Write(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else Write(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}
MONTECAR.PAS Ђ«Ј1
{Џа®Ја ¬¬ ®вᥨў ой п ҐЄ®в®алҐ ў аЁ вл бЁ¬¬ҐваЁзле аҐиҐЁ©.}
program Monte_Carlo;
Uses Crt, Dos;
const maxN = 20;
type Nat = 1..maxN;
Nat0 = 0..maxN;
pos = array[Nat] of Nat;
var n : Nat;
nExp : integer;
v : Double;
fout : Text;
t, t1,t2 : LongInt;
min, sec, s100 : Word;
procedure MonteCarlo ( nExp : integer; n : Nat; var v: Double );
var k : Nat0;
m_k, num : Nat0;
i : Nat;
iExp : Word;
a, S_k : pos;
n_div_2 : Nat0;
all, sum, prod : Double;
function NoQueen ( k: Nat; s: Nat) : Boolean;
{ NoFerz = 'дҐа§м Ґ ¬®¦Ґв Ўлвм Ї®бв ў«Ґ ў бва®Єг s бв®«Ўж k' }
{ ¬ ббЁў a[*] - ўҐиЁ© }
var Flag : Boolean;
i : Nat;
begin {NoQueen}
Flag := True;
i := 1;
while (i<k) and Flag do
begin { Flag='дҐа§Ё [1..i) Ґ в Єгов Ї®«Ґ <k,s>'}
{ в ЄгҐв «Ё дҐа§м Ё§ i-Ј® бв®«Ўж Ї®«Ґ <k,s>?}
Flag := not ( (a[i]=s) or (abs(a[i]-s)=k-i) );
i := i+1
end {while};
NoQueen := not Flag
end {NoQueen};
procedure FormSk ( k: Nat; var m_k: Nat0; var S_k: pos );
{ д®а¬ЁагҐв "¬®¦Ґбвў®" (ўҐЄв®а) S_k ў®§¬®¦ле 室®ў Ё
ҐЈ® ¬®й®бвм m_k; Ґб«Ё S_k Їгбв®, в® m_k=0 }
var s: Nat;
begin
m_k := 0;
for s:=1 to n do
if not NoQueen( k, s) then
begin { ¬®¦® бв ўЁвм }
m_k := m_k + 1;
S_k[m_k] := s
end;
end {FormSk};
begin { MonteCarlo }
Randomize;
n_div_2 := n div 2;
all := 0;
for iExp:=1 to nExp do
begin { ®зҐаҐ¤®Ґ ЁбЇлв ЁҐ }
m_k := n_div_2 - 1;
num := Random ( m_k ) + 1;
a[1] := 1+num;
k := 2;
prod := m_k;
sum := prod;
FormSk ( k, m_k, S_k );
while m_k<>0 do
begin
prod := prod*m_k;
sum := sum + prod;
num := Random ( m_k ) + 1;
a[k] := S_k[num];
k := k + 1;
FormSk ( k, m_k, S_k );
end {while};
all := all + sum
end {for};
v := all/nExp
end { MonteCarlo };
begin
WriteLn(' n = ?'); ReadLn(n);
WriteLn(' nExp = ?'); ReadLn(nExp);
Assign(fout,'MONTEC.DAT');
Rewrite{Append}(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'Є®«ЁзҐбвў® ЁбЇлв Ё© = ',nExp:2);
MyGetTime(t1);
MonteCarlo ( nExp, n, v );
MyGetTime(t2);
WriteLn(fout,'Є®«ЁзҐбвў® 㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ :', v :12:1 );
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
if(s100<10)
then WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}
MONTECAR.PAS Ђ«Ј1
{ Ї®ЁбЄ ўбҐе аҐиҐЁ© }
program Monte_Carlo;
Uses Crt, Dos;
const maxN = 20;
type Nat = 1..maxN;
Nat0 = 0..maxN;
pos = array[Nat] of Nat;
var n : Nat;
nExp : integer;
v : Double;
fout : Text;
t, t1,t2 : LongInt;
min, sec, s100 : Word;
procedure MonteCarlo ( nExp : integer; n : Nat; var v: Double );
var k : Nat0;
m_k, num : Nat0;
i : Nat;
iExp : Word;
a, S_k : pos;
n_div_2 : Nat0;
all, sum, prod : Double;
function NoFerz ( k: Nat; s: Nat) : Boolean;
{ NoFerz = 'дҐа§м Ґ ¬®¦Ґв Ўлвм Ї®бв ў«Ґ ў бва®Єг s бв®«Ўж k' }
{ ¬ ббЁў a[*] - ўҐиЁ© }
var Flag : Boolean;
i : Nat;
begin {NoFerz}
Flag := True;
i := 1;
while (i<k) and Flag do
begin { Flag='дҐа§Ё [1..i) Ґ в Єгов Ї®«Ґ <k,s>'}
{ в ЄгҐв «Ё дҐа§м Ё§ i-Ј® бв®«Ўж Ї®«Ґ <k,s>?}
Flag := not ( (a[i]=s) or (abs(a[i]-s)=k-i) );
i := i+1
end {while};
NoFerz := not Flag
end {NoFerz};
procedure FormSk ( k: Nat; var m_k: Nat0; var S_k: pos );
{ д®а¬ЁагҐв "¬®¦Ґбвў®" (ўҐЄв®а) S_k ў®§¬®¦ле 室®ў Ё
ҐЈ® ¬®й®бвм m_k; Ґб«Ё S_k Їгбв®, в® m_k=0 }
var s: Nat;
begin
m_k := 0;
for s:=1 to n do
if not NoFerz( k, s) then
begin { ¬®¦® бв ўЁвм }
m_k := m_k + 1;
S_k[m_k] := s
end;
end {FormSk};
begin { MonteCarlo }
Randomize;
n_div_2 := n div 2;
all := 0;
for iExp:=1 to nExp do
begin { ®зҐаҐ¤®Ґ ЁбЇлв ЁҐ }
m_k :=n-1;
num := Random ( m_k )+1;
a[1] := num+1;
k := 1;
prod :=1;
sum := prod;
FormSk ( k, m_k, S_k );
while m_k<>0 do
begin
prod := prod*m_k;
sum := sum + prod;
num := Random ( m_k ) + 1;
a[k] := S_k[num];
k := k + 1;
FormSk ( k, m_k, S_k );
end {while};
all := all + sum
end {for};
v := all/nExp
end { MonteCarlo };
begin
WriteLn(' n = ?'); ReadLn(n);
WriteLn(' nExp = ?'); ReadLn(nExp);
Assign(fout,'MONTEC.DAT');
Rewrite{Append}(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'Є®«ЁзҐбвў® ЁбЇлв Ё© = ',nExp:2);
MyGetTime(t1);
MonteCarlo ( nExp, n, v );
MyGetTime(t2);
WriteLn(fout,'Є®«ЁзҐбвў® 㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ :', v :12:1 );
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
if(s100<10)
then WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else WriteLn(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}
MONTECAR.PAS Ђ«Ј2
{ Ї®ЁбЄ ўбҐе аҐиҐЁ© }
Uses Dos,crt;
const MaxN=16;
type Nat=1..MaxN;
Nat0=0..MaxN;
var
H:array[1..MaxN] of boolean; { § пв (false) Ј®аЁ§®в «м }
D1:array[2..2*MaxN] of boolean; { § пв (false) /-¤Ё Ј® «м }
D2:array[1-MaxN..MaxN-1] of boolean;{ § пв (false) \-¤Ё Ј® «м }
N:Nat;
nExp:integer; { Є®«ЁзҐбвў® Їа®е®¤®ў Ї® ¤ҐаҐўг }
v:Real; { Є®«ЁзҐбвў® Є®аҐ© }
fout:text; {ўл室®© д ©«}
{--------------------------------------------------------------------------}
t, t1,t2 : LongInt;
min, sec, s100 : Word;
{--------------------------------------------------------------------------}
procedure Mass;
{ Ё§ з «м® ¬ ббЁўл Їгбвл(Ґв § пвле Ї®§ЁжЁ©) }
var i:integer;
begin
for i:=1 to N do H[i]:=true;
for i:=2 to 2*N do D1[i]:=true;
for i:=1-N to N-1 do D2[i]:=true;
end{ Mass };
procedure FormS( num:Nat0;i:Nat );
{ ўлЎЁа Ґв 室 б ®¬Ґа®¬ (num) Ё§ ўбҐе ў®§¬¦ле }
var j:Nat;
k:Nat0;
begin
k:=0; j:=1;
while (j<=n)and(k<>num) do
begin
if H[j] and D1[i+j] and D2[i-j] then k:=k+1;
j:=j+1;
end;
H[j-1]:=false; D1[i+j-1]:=false; D2[i-j+1]:=false;
end{ FormS };
function ModS(i:Nat):Nat0;
{ 室Ёв Є®«ЁзҐбвў® ў®§¬®¦ле 室®ў }
var j:Nat;
m:Nat0;
begin
m:=0;
if i<=N then
for j:=1 to N do
if H[j] and D1[i+j] and D2[i-j] then m:=m+1;
ModS:=m;
end { ModS };
procedure MonteCarlo( nExp:integer; var v: Real );
var iExp:integer;
num,m:Nat0;
all,sum, prod : Real;
i:Nat;
begin { MonteCarlo }
Randomize;
all:=0;
for iExp:=1 to nExp do
begin { ®зҐаҐ¤®Ґ ЁбЇлв ЁҐ }
Mass; prod:=1; i:=1; m:=N; sum:=0;
while m<>0 do
begin
prod:=prod*m;
sum:=sum+prod;
num:=Random(m); if (num=0) then num:=m;
FormS(num,i); i:=i+1; m:=ModS(i);
end {while};
all:=all+sum;
end {for};
v:=all/nExp;
end{ MonteCarlo };
begin
clrscr;
WriteLn(' n = ?'); ReadLn(n);
WriteLn(' nExp = ?'); ReadLn(nExp);
Assign(fout,'MONTE‘.DAT');
Rewrite(fout);
WriteLn(fout,'Є®«ЁзҐбвў® дҐа§Ґ© = ',n:2);
WriteLn(fout,'Є®«ЁзҐбвў® ЁбЇлв Ё© = ',nExp:2);
MyGetTime(t1);
MonteCarlo ( nExp, v );
MyGetTime(t2);
WriteLn(fout,'Є®«ЁзҐбвў® 㧫®ў ў ¤ҐаҐўҐ Ї®ЁбЄ :', v :12:1 );
t := t2 - t1; MyUnPackTime( t, min, sec, s100);
if(s100<10)
then Write(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.0', s100,' ᥪ')
else Write(fout,'ўаҐ¬п = ', min,' ¬Ё ', sec,'.', s100,' ᥪ');
Close (fout)
end.
{===========================================================================}