Добавил:
bagiwow
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ѓ« ў 3. ЋЎе®¤ ¤ҐаҐў . ЏҐаҐЎ®а б ў®§ўа в ¬Ё.
3.1. ”Ґа§Ё, Ґ ЎмойЁҐ ¤агЈ ¤агЈ : ®Ўе®¤ ¤ҐаҐў Ї®§ЁжЁ©
‚ ЇаҐ¤л¤г饩 Ј« ўҐ ¬л а бб¬ ваЁў «Ё ҐбЄ®«мЄ® § ¤ з ®¤®Ј®
Ё в®Ј® ¦Ґ вЁЇ : "ЇҐаҐзЁб«Ёвм ўбҐ н«Ґ¬Ґвл ҐЄ®в®а®Ј® ¬®¦Ґбвў
A". ‘奬 аҐиҐЁп Ўл« в Є®ў : ¬®¦Ґб⢥ A ўў®¤Ё«бп Ї®а冷Є Ё
®ЇЁблў « бм Їа®жҐ¤га ЇҐаҐе®¤ ®в Їа®Ё§ў®«м®Ј® н«Ґ¬Ґв ¬®-
¦Ґбвў A Є б«Ґ¤го饬㠧 Ё¬ (ў н⮬ Ї®ап¤ЄҐ). ’ Єго б奬㠥
ўбҐЈ¤ г¤ Ґвбп ॠ«Ё§®ў вм ҐЇ®б।б⢥®, Ё ў нв®© Ј« ўҐ ¬л
а бᬮваЁ¬ ¤агЈ®© Ї®«Ґ§л© ЇаЁҐ¬ ЇҐаҐзЁб«ҐЁп ўбҐе н«Ґ¬Ґв®ў Ґ-
Є®в®а®Ј® ¬®¦Ґбвў . …Ј® §лў ов "Ї®ЁбЄ б ў®§ўа в ¬Ё", "¬Ґв®¤
ўҐвўҐ© Ё Ја Ёж", "backtracking". Ќ и ў§Ј«п¤ ЁЎ®«ҐҐ в®з®Ґ
§ў ЁҐ нв®Ј® ¬Ґв®¤ - ®Ўе®¤ ¤ҐаҐў .
3.1.1. ЏҐаҐзЁб«Ёвм ўбҐ бЇ®б®Ўл а ббв ®ўЄЁ n дҐа§Ґ© и е-
¬ в®© ¤®бЄҐ n n, ЇаЁ Є®в®але ®Ё Ґ Ўмов ¤агЈ ¤агЈ .
ђҐиҐЁҐ. ЋзҐўЁ¤®, Є ¦¤®© Ё§ n Ј®аЁ§®в «Ґ© ¤®«¦® бв®-
пвм Ї® дҐа§о. Ѓг¤Ґ¬ §лў вм k-Ї®§ЁжЁҐ© (¤«п k = 0, 1,...,n)
Їа®Ё§ў®«мго а ббв ®ўЄг k дҐа§Ґ© k Ё¦Ёе Ј®аЁ§®в «пе (дҐа-
§Ё ¬®Јгв ЎЁвм ¤агЈ ¤агЈ ). Ќ аЁб㥬 "¤ҐаҐў® Ї®§ЁжЁ©": ҐЈ® Є®аҐ¬
Ўг¤Ґв Ґ¤Ёб⢥ п 0-Ї®§ЁжЁп, Ё§ Є ¦¤®© k-Ї®§ЁжЁЁ ўл室Ёв n
бв५®Є ўўҐае ў (k+1)-Ї®§ЁжЁЁ. ќвЁ n Ї®§ЁжЁ© ®в«Ёз овбп Ї®«®¦Ґ-
ЁҐ¬ дҐа§п (k+1)-®© Ј®аЁ§®в «Ё. Ѓг¤Ґ¬ бзЁв вм, зв® а бЇ®«®-
¦ҐЁҐ Ёе аЁбгЄҐ ᮮ⢥вбвўгҐв Ї®«®¦ҐЁо нв®Ј® дҐа§п: «ҐўҐҐ
в Ї®§ЁжЁп, ў Є®в®а®© дҐа§м а бЇ®«®¦Ґ «ҐўҐҐ.
„ҐаҐў® Ї®§ЁжЁ© ¤«п
n = 2
‘।Ё Ї®§ЁжЁ© нв®Ј® ¤ҐаҐў ¬ ¤® ®в®Ўа вм ⥠n-Ї®§ЁжЁЁ, ў Є®-
в®але дҐа§Ё Ґ Ўмов ¤агЈ ¤агЈ . Џа®Ја ¬¬ Ўг¤Ґв "®Ўе®¤Ёвм ¤ҐаҐ-
ў®" Ё ЁбЄ вм Ёе. —в®Ўл Ґ ¤Ґ« вм «ЁиҐ© а Ў®вл, § ¬ҐвЁ¬ ў®в зв®:
Ґб«Ё ў Є Є®©-в® k-Ї®§ЁжЁЁ дҐа§Ё Ўмов ¤агЈ ¤агЈ , в® бв ўЁвм
¤ «мҐ©иЁе дҐа§Ґ© б¬лб« Ґв. Џ®н⮬г, ®Ў аг¦Ёў нв®, ¬л Ўг¤Ґ¬
ЇаҐЄа й вм Ї®бв஥ЁҐ ¤ҐаҐў ў н⮬ Їа ў«ҐЁЁ.
’®зҐҐ, §®ўҐ¬ k-Ї®§ЁжЁо ¤®ЇгбвЁ¬®©, Ґб«Ё Ї®б«Ґ г¤ «ҐЁп
ўҐа奣® дҐа§п ®бв ўиЁҐбп Ґ Ўмов ¤агЈ ¤агЈ . Ќ и Їа®Ја ¬¬ Ўг-
¤Ґв а бб¬ ваЁў вм в®«мЄ® ¤®ЇгбвЁ¬лҐ Ї®§ЁжЁЁ.
„ҐаҐў® ¤®ЇгбвЁ¬ле
Ї®§ЁжЁ© ¤«п n = 3
ђ §®ЎмҐ¬ § ¤ зг ¤ўҐ з бвЁ: (1) ®Ўе®¤ Їа®Ё§ў®«м®Ј® ¤ҐаҐ-
ў Ё (2) ॠ«Ё§ жЁо ¤ҐаҐў ¤®ЇгбвЁ¬ле Ї®§ЁжЁ©.
‘д®а¬г«Ёа㥬 § ¤ зг ®Ўе®¤ Їа®Ё§ў®«м®Ј® ¤ҐаҐў . Ѓг¤Ґ¬ бзЁ-
в вм, зв® г б Ё¬ҐҐвбп ђ®Ў®в, Є®в®ал© ў Є ¦¤л© ¬®¬Ґв 室Ёвбп
ў ®¤®© Ё§ ўҐаиЁ ¤ҐаҐў (ўҐаиЁл Ё§®Ўа ¦Ґл аЁбгЄҐ Єа㦮з-
Є ¬Ё). Ћ 㬥Ґв ўлЇ®«пвм Є®¬ ¤л:
ўўҐае_ «Ґў® (Ё¤вЁ Ї® б ¬®© «Ґў®©
Ё§ ўл室пйЁе ўўҐае бв५®Є)
ўЇа ў® (ЇҐаҐ©вЁ ў б®бҐ¤оо бЇа ў
ўҐаиЁг)
ўЁ§ (бЇгбвЁвмбп ўЁ§ ®¤Ё га®-
ўҐм)
ўўҐае_ «Ґў®
ўЇа ў®
ўЁ§
Ё Їа®ўҐаЄЁ, ᮮ⢥вбвўгойЁҐ ў®§¬®¦®бвЁ ўлЇ®«Ёвм Є ¦¤го Ё§ Є®-
¬ ¤, §лў Ґ¬лҐ "Ґбвм_ᢥаег", "Ґбвм_бЇа ў ", "Ґбвм_бЁ§г"
(Ї®б«Ґ¤пп ЁбвЁ ўбо¤г, Єа®¬Ґ Є®ап). ЋЎа вЁвҐ ўЁ¬ ЁҐ, зв®
Є®¬ ¤ "ўЇа ў®" Ї®§ў®«пҐв ЇҐаҐ©вЁ «Ёим Є "த®¬г Ўа вг", ® Ґ
Є "¤ў®оத®¬г".
’ Є Є®¬ ¤ "ўЇа ў®"
Ќ… ¤Ґ©бвўгҐв!
Ѓг¤Ґ¬ бзЁв вм, зв® г ђ®Ў®в Ґбвм Є®¬ ¤ "®Ўа Ў®в вм" Ё зв®
ҐЈ® § ¤ з - ®Ўа Ў®в вм ўбҐ «Ёбвмп (ўҐаиЁл, Ё§ Є®в®але Ґв
бв५®Є ўўҐае, в® Ґбвм Ј¤Ґ гб«®ўЁҐ "Ґбвм_ᢥаег" «®¦®). „«п -
襩 и е¬ в®© § ¤ зЁ Є®¬ ¤Ґ ®Ўа Ў®в вм Ўг¤Ґв ᮮ⢥вбвў®ў вм
Їа®ўҐаЄ Ё ЇҐз вм Ї®§ЁжЁЁ дҐа§Ґ©.
„®Є § ⥫мбвў® Їа ўЁ«м®бвЁ ЇаЁў®¤Ё¬®© ¤ «ҐҐ Їа®Ја ¬¬л Ёб-
Ї®«м§гҐв в ЄЁҐ ®ЇаҐ¤Ґ«ҐЁп. Џгбвм дЁЄбЁа®ў ® Ї®«®¦ҐЁҐ ђ®Ў®в ў
®¤®© Ё§ ўҐаиЁ ¤ҐаҐў . ’®Ј¤ ўбҐ «Ёбвмп ¤ҐаҐў а §ЎЁў овбп
ваЁ Є ⥣®аЁЁ: ¤ ђ®Ў®в®¬, «ҐўҐҐ ђ®Ў®в Ё Їа ўҐҐ ђ®Ў®в . (Џгвм
Ё§ Є®ап ў «Ёбв ¬®¦Ґв Їа®е®¤Ёвм зҐаҐ§ ўҐаиЁг б ђ®Ў®в®¬, бў®а -
зЁў вм ў«Ґў®, Ґ ¤®е®¤п ¤® ҐҐ Ё бў®а зЁў вм ўЇа ў®, Ґ ¤®е®¤п
¤® ҐҐ.) —ҐаҐ§ (Ћ‹) ®Ў®§ зЁ¬ гб«®ўЁҐ "®Ўа Ў®в л ўбҐ «Ёбвмп «Ґ-
ўҐҐ ђ®Ў®в ", зҐаҐ§ (Ћ‹Ќ) - гб«®ўЁҐ "®Ўа Ў®в л ўбҐ «Ёбвмп «Ґ-
ўҐҐ Ё ¤ ђ®Ў®в®¬".
Ќ ¬ Ї® ¤®ЎЁвбп в Є п Їа®жҐ¤га :
procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
| {¤ ®: (Ћ‹), ¤®: (Ћ‹Ќ)}
begin
| {Ёў аЁ в: Ћ‹}
| while Ґбвм_ᢥаег do begin
| | ўўҐае_ «Ґў®
| end
| {Ћ‹, ђ®Ў®в ў «ЁбвҐ}
| ®Ўа Ў®в вм;
| {Ћ‹Ќ}
end;
Ћб®ў®© «Ј®аЁв¬:
¤ ®: ђ®Ў®в ў Є®аҐ, «Ёбвмп Ґ ®Ўа Ў®в л
¤®: ђ®Ў®в ў Є®аҐ, «Ёбвмп ®Ўа Ў®в л
{Ћ‹}
ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
{Ёў аЁ в: Ћ‹Ќ}
while Ґбвм_бЁ§г do begin
| if Ґбвм_бЇа ў then begin {Ћ‹Ќ, Ґбвм бЇа ў }
| | ўЇа ў®;
| | {Ћ‹}
| | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
| end else begin
| | {Ћ‹Ќ, Ґ Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| end;
end;
{Ћ‹Ќ, ђ®Ў®в ў Є®аҐ => ўбҐ «Ёбвмп ®Ўа Ў®в л}
Ћбв «®бм ў®бЇ®«м§®ў вмбп б«Ґ¤гойЁ¬Ё бў®©бвў ¬Ё Є®¬ ¤ ђ®Ў®в
(ᢥаег § ЇЁб л гб«®ўЁп, ў Є®в®але ўлЇ®«пҐвбп Є®¬ ¤ , бЁ§г -
г⢥তҐЁп ® १г«мв ⥠ҐҐ ўлЇ®«ҐЁп):
(1) {Ћ‹, Ґ Ґбвм_ᢥаег} (2) {Ћ‹}
®Ўа Ў®в вм ўўҐае_ «Ґў®
{Ћ‹Ќ} {Ћ‹}
(3) {Ґбвм_бЇа ў , Ћ‹Ќ} (4) {Ґ Ґбвм_бЇа ў , Ћ‹Ќ}
ўЇа ў® ўЁ§
{Ћ‹} {Ћ‹Ќ}
3.1.2. „®Є § вм, зв® ЇаЁўҐ¤Ґ п Їа®Ја ¬¬ § ўҐаи Ґв а Ў®вг
( «оЎ®¬ Є®Ґз®¬ ¤ҐаҐўҐ).
ђҐиҐЁҐ. Џа®жҐ¤га ўўҐае_ «Ґў® § ўҐаи Ґв а Ў®вг (ўлб®в
ђ®Ў®в Ґ ¬®¦Ґв 㢥«ЁзЁў вмбп ЎҐбЄ®Ґз®). …б«Ё Їа®Ја ¬¬ а Ў®-
в Ґв ЎҐбЄ®Ґз®, в®, Ї®бЄ®«мЄг «Ёбвмп Ґ ®Ўа Ў влў овбп Ї®ўв®а-
®, зЁ п б ҐЄ®в®а®Ј® ¬®¬Ґв Ё ®¤Ё «Ёбв Ґ ®Ўа Ў влў Ґвбп.
Ђ нв® ў®§¬®¦®, в®«мЄ® Ґб«Ё ђ®Ў®в ўбҐ ўаҐ¬п бЇгбЄ Ґвбп ўЁ§.
Џа®вЁў®аҐзЁҐ. (ЋЎ ®жҐЄҐ зЁб« ¤Ґ©бвўЁ© б¬. ¤ «ҐҐ.)
3.1.3. „®Є § вм Їа ўЁ«м®бвм б«Ґ¤го饩 Їа®Ја ¬¬л ®Ўе®¤ ¤Ґ-
ॢ :
var state: (WL, WLU);
state := WL;
while Ґбвм_бЁ§г or (state <> WLU) do begin
| if (state = WL) and Ґбвм_ᢥаег then begin
| | ўўҐае;
| end else if (state = WL) and not Ґбвм_ᢥаег then begin
| | ®Ўа Ў®в вм; state := WLU;
| end else if (state = WLU) and Ґбвм_бЇа ў then begin
| | ўЇа ў®; state := WL;
| end else begin {state = WLU, not Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| end;
end;
ђҐиҐЁҐ. €ў аЁ в жЁЄ« :
state = WL => Ћ‹
state = WLU => Ћ‹Ќ
„®Є § ⥫мбвў® § ўҐа襨п а Ў®вл: ЇҐаҐе®¤ Ё§ б®бв®пЁп Ћ‹ ў Ћ‹Ќ
ў®§¬®¦Ґ в®«мЄ® ЇаЁ ®Ўа Ў®вЄҐ ўҐаиЁл, Ї®н⮬㠥᫨ Їа®Ја ¬¬
а Ў®в Ґв ЎҐбЄ®Ґз®, в® б ҐЄ®в®а®Ј® ¬®¬Ґв § 票Ґ state Ґ
¬ҐпҐвбп, зв® Ґў®§¬®¦®.
3.1.4. ђҐиЁвм § ¤ зг ®Ў ®Ўе®¤Ґ ¤ҐаҐў , Ґб«Ё ¬л е®вЁ¬, зв®Ўл
®Ўа Ў влў «Ёбм ўбҐ ўҐаиЁл (Ґ в®«мЄ® «Ёбвмп).
ђҐиҐЁҐ. Џгбвм x - ҐЄ®в®а п ўҐаиЁ . ’®Ј¤ «оЎ п ўҐаиЁ y
®в®бЁвбп Є ®¤®© Ё§ зҐвлаҐе Є ⥣®аЁ©. ђ бᬮваЁ¬ Їгвм Ё§ Є®ап
ў y. Ћ ¬®¦Ґв:
( ) Ўлвм з бвмо ЇгвЁ Ё§ Є®ап ў x (y Ё¦Ґ x);
(Ў) ᢥагвм «Ґў® б ЇгвЁ ў x (y «ҐўҐҐ x);
(ў) Їа®©вЁ зҐаҐ§ x (y ¤ x);
(Ј) ᢥагвм Їа ў® б ЇгвЁ ў x (y Їа ўҐҐ x);
‚ з бв®бвЁ, б ¬ ўҐаиЁ x ®в®бЁвбп Є Є ⥣®аЁЁ (ў). “б«®ўЁп
⥯Ґам Ўг¤гв в ЄЁ¬Ё:
(ЋЌ‹) ®Ўа Ў®в л ўбҐ ўҐаиЁл Ё¦Ґ Ё «ҐўҐҐ;
(ЋЌ‹Ќ) ®Ўа Ў®в л ўбҐ ўҐаиЁл Ё¦Ґ, «ҐўҐҐ Ё ¤.
‚®в Є Є Ўг¤Ґв ўлЈ«п¤Ґвм Їа®Ја ¬¬ :
procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
| {¤ ®: (ЋЌ‹), ¤®: (ЋЌ‹Ќ)}
begin
| {Ёў аЁ в: ЋЌ‹}
| while Ґбвм_ᢥаег do begin
| | ®Ўа Ў®в вм
| | ўўҐае_ «Ґў®
| end
| {ЋЌ‹, ђ®Ў®в ў «ЁбвҐ}
| ®Ўа Ў®в вм;
| {ЋЌ‹Ќ}
end;
Ћб®ў®© «Ј®аЁв¬:
¤ ®: ђ®Ў®в ў Є®аҐ, ЁзҐЈ® Ґ ®Ўа Ў®в ®
¤®: ђ®Ў®в ў Є®аҐ, ўбҐ ўҐаиЁл ®Ўа Ў®в л
{ЋЌ‹}
ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
{Ёў аЁ в: ЋЌ‹Ќ}
while Ґбвм_бЁ§г do begin
| if Ґбвм_бЇа ў then begin {ЋЌ‹Ќ, Ґбвм бЇа ў }
| | ўЇа ў®;
| | {ЋЌ‹}
| | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
| end else begin
| | {Ћ‹Ќ, Ґ Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| end;
end;
{ЋЌ‹Ќ, ђ®Ў®в ў Є®аҐ => ўбҐ ўҐаиЁл ®Ўа Ў®в л}
3.1.5. ЏаЁўҐ¤Ґ п в®«мЄ® зв® Їа®Ја ¬¬ ®Ўа Ў влў Ґв ўҐаиЁ-
г ¤® в®Ј®, Є Є ®Ўа Ў®в «оЎ®© Ё§ ҐҐ Ї®в®¬Є®ў. Љ Є Ё§¬ҐЁвм ҐҐ,
зв®Ўл Є ¦¤ п ўҐаиЁ , Ґ пў«пой пбп «Ёб⮬, ®Ўа Ў влў « бм ¤ў ¦-
¤л: ®¤Ё а § ¤®, ¤агЈ®© а § Ї®б«Ґ ўбҐе бў®Ёе Ї®в®¬Є®ў? (‹Ёбвмп
Ї®-ЇаҐ¦Ґ¬г ®Ўа Ў влў овбп Ї® а §г.)
ђҐиҐЁҐ. Џ®¤ "®Ўа Ў®в ® Ё¦Ґ Ё «ҐўҐҐ" Ўг¤Ґ¬ Ї®Ё¬ вм "Ё¦Ґ
®Ўа Ў®в ® Ї® а §г, б«Ґў ®Ўа Ў®в ® Ї®«®бвмо («Ёбвмп Ї® а §г,
®бв лҐ Ї® ¤ў )". Џ®¤ "®Ўа Ў®в ® Ё¦Ґ, «ҐўҐҐ Ё ¤" Ўг¤Ґ¬ Ї®Ё-
¬ вм "Ё¦Ґ ®Ўа Ў®в ® Ї® а §г, «ҐўҐҐ Ё ¤ - Ї®«®бвмо".
Џа®Ја ¬¬ Ўг¤Ґв в Є®©:
procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
| {¤ ®: (ЋЌ‹), ¤®: (ЋЌ‹Ќ)}
begin
| {Ёў аЁ в: ЋЌ‹}
| while Ґбвм_ᢥаег do begin
| | ®Ўа Ў®в вм
| | ўўҐае_ «Ґў®
| end
| {ЋЌ‹, ђ®Ў®в ў «ЁбвҐ}
| ®Ўа Ў®в вм;
| {ЋЌ‹Ќ}
end;
Ћб®ў®© «Ј®аЁв¬:
¤ ®: ђ®Ў®в ў Є®аҐ, ЁзҐЈ® Ґ ®Ўа Ў®в ®
¤®: ђ®Ў®в ў Є®аҐ, ўбҐ ўҐаиЁл ®Ўа Ў®в л
{ЋЌ‹}
ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
{Ёў аЁ в: ЋЌ‹Ќ}
while Ґбвм_бЁ§г do begin
| if Ґбвм_бЇа ў then begin {ЋЌ‹Ќ, Ґбвм бЇа ў }
| | ўЇа ў®;
| | {ЋЌ‹}
| | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
| end else begin
| | {Ћ‹Ќ, Ґ Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| | ®Ўа Ў®в вм;
| end;
end;
{ЋЌ‹Ќ, ђ®Ў®в ў Є®аҐ => ўбҐ ўҐаиЁл ®Ўа Ў®в л Ї®«®бвмо}
3.1.6. „®Є § вм, зв® зЁб«® ®ЇҐа жЁ© ў нв®© Їа®Ја ¬¬Ґ Ї® Ї®-
ап¤Єг а ў® зЁб«г ўҐаиЁ ¤ҐаҐў . (Љ Є Ё ў ¤агЈЁе Їа®Ја ¬¬ е, Є®-
в®алҐ ®в«Ёз овбп ®в нв®© «Ёим Їа®ЇгбЄ®¬ ҐЄ®в®але Є®¬ ¤ "®Ўа -
Ў®в вм".)
“Є § ЁҐ. ЏаЁ¬Ґа® Є ¦¤®Ґ ўв®а®Ґ ¤Ґ©бвўЁҐ ЇаЁ ЁбЇ®«ҐЁЁ
нв®© Їа®Ја ¬¬л - ®Ўа Ў®вЄ ўҐаиЁл, Є ¦¤ п ўҐаиЁ ®Ўа Ў влў -
Ґвбп ¬ ЄбЁ¬г¬ ¤ў ¦¤л.
’ҐЇҐам ॠ«Ё§гҐ¬ ®ЇҐа жЁЁ б ¤ҐаҐў®¬ Ї®§ЁжЁ©. Џ®§ЁжЁо Ўг¤Ґ¬
ЇаҐ¤бв ў«пвм б Ї®¬®ймо ЇҐаҐ¬Ґ®© k: 0..n (зЁб«® дҐа§Ґ©) Ё ¬ б-
бЁў c: array [1..n] of 1..n (c [i] - Є®®а¤Ё вл дҐа§п i-®©
Ј®аЁ§®в «Ё; ЇаЁ i > k § 票Ґ c [i] а®«Ё Ґ ЁЈа Ґв). ЏаҐ¤Ї®« -
Ј Ґвбп, зв® ўбҐ Ї®§ЁжЁЁ ¤®ЇгбвЁ¬л (Ґб«Ё гЎа вм ўҐа奣® дҐа§п,
®бв «млҐ Ґ Ўмов ¤агЈ ¤агЈ ).
program queens;
| const n = ...;
| var
| k: 0..n;
| c: array [1..n] of 1..n;
|
| procedure begin_work; { з вм а Ў®вг}
| begin
| | k := 0;
| end;
|
| function danger: boolean; {ўҐаеЁ© дҐа§м Ї®¤ Ў®Ґ¬}
| | var b: boolean; i: integer;
| begin
| | if k <= 1 then begin
| | | danger := false;
| | end else begin
| | | b := false; i := 1;
| | | {b <=> ўҐаеЁ© дҐа§м Ї®¤ Ў®Ґ¬ дҐа§Ґ© б ®¬Ґа ¬Ё < i}
| | | while i <> k do begin
| | | | b := b or (c[i]=c[k]) {ўҐавЁЄ «м}
| | | | or (abs(c[[i]-c[k]))=abs(i-k)); {¤Ё Ј® «м}
| | | | i := i+ 1;
| | | end;
| | | danger := b;
| | end;
| end;
|
| function is_up: boolean {Ґбвм_ᢥаег}
| begin
| | is_up := (k < n) and not danger;
| end;
|
| function is_right: boolean {Ґбвм_бЇа ў }
| begin
| | is_right := (k > 0) and (c[k] < n);
| end;
| {ў®§¬®¦ ®иЁЎЄ : ЇаЁ k=0 Ґ ®ЇаҐ¤Ґ«Ґ® c[k]}
|
| function is_down: boolean {Ґбвм_бЁ§г}
| begin
| | is_up := (k > 0);
| end;
|
| procedure up; {ўўҐае_ «Ґў®}
| begin {k < n}
| | k := k + 1;
| | c [k] := 1;
| end;
|
| procedure right; {ўЇа ў®}
| begin {k > 0, c[k] < n}
| | c [k] := c [k] + 1;
| end;
|
| procedure down; {ўЁ§}
| begin {k > 0}
| | k := k - 1;
| end;
|
| procedure work; {®Ўа Ў®в вм}
| | var i: integer;
| begin
| | if (k = n) and not danger then begin
| | | for i := 1 to n do begin
| | | | write ('<', i, ',' , c[i], '> ');
| | | end;
| | | writeln;
| | end;
| end;
|
| procedure UW; {ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм}
| begin
| | while is_up do begin
| | | up;
| | end
| | work;
| end;
|
begin
| begin_work;
| UW;
| while is_down do begin
| | if is_right then begin
| | | right;
| | | UW;
| | end else begin
| | | down;
| | end;
| end;
end.
3.1.7. ЏаЁўҐ¤Ґ п Їа®Ја ¬¬ ва вЁв ¤®ў®«м® ¬®Ј® ўаҐ¬ҐЁ
ўлЇ®«ҐЁҐ Їа®ўҐаЄЁ Ґбвм_ᢥаег (Їа®ўҐаЄ , 室Ёвбп «Ё
ўҐаеЁ© дҐа§м Ї®¤ Ў®Ґ¬, вॡгҐв зЁб« ¤Ґ©бвўЁ© Ї®ап¤Є n). €§¬Ґ-
Ёвм ॠ«Ё§ жЁо ®ЇҐа жЁ© б ¤ҐаҐў®¬ Ї®§ЁжЁ© в Є, зв®Ўл ўбҐ ваЁ
Їа®ўҐаЄЁ Ґбвм_ᢥаег/бЇа ў /бЁ§г Ё ᮮ⢥вбвўгойЁҐ Є®¬ ¤л ваҐ-
Ў®ў «Ё Ўл Є®«ЁзҐбвў ¤Ґ©бвўЁ©, ®Ја ЁзҐ®Ј® Ґ § ўЁбп饩 ®в n
Є®бв в®©.
ђҐиҐЁҐ. „«п Є ¦¤®© ўҐавЁЄ «Ё, Є ¦¤®© ў®б室п饩 Ё Є ¦¤®©
Ёб室п饩 ¤Ё Ј® «Ё Ўг¤Ґ¬ еа Ёвм Ўг«ҐўбЄ®Ґ § 票Ґ - ᢥ¤ҐЁп
® ⮬, 室Ёвбп «Ё нв®© «ЁЁЁ дҐа§м (ўҐаеЁ© дҐа§м Ґ гзЁвл-
ў Ґвбп). (‡ ¬ҐвЁ¬, зв® ў бЁ«г ¤®ЇгбвЁ¬®бвЁ Ї®§ЁжЁЁ Є ¦¤®© Ё§
«ЁЁ© ¬®¦Ґв Ўлвм Ґ Ў®«ҐҐ ®¤®Ј® дҐа§п.).
3.2. ЋЎе®¤ ¤ҐаҐў ў ¤агЈЁе § ¤ з е.
3.2.1. €бЇ®«м§®ў вм ¬Ґв®¤ ®Ўе®¤ ¤ҐаҐў ¤«п аҐиҐЁп б«Ґ¤г-
о饩 § ¤ зЁ: ¤ ¬ ббЁў Ё§ n 楫ле Ї®«®¦ЁвҐ«мле зЁбҐ«
a[1]..a[n] Ё зЁб«® s; вॡгҐвбп г§ вм, ¬®¦Ґв «Ё зЁб«® s Ўлвм
ЇаҐ¤бв ў«Ґ® Є Є б㬬 ҐЄ®в®але Ё§ зЁбҐ« ¬ ббЁў a. (Љ ¦¤®Ґ
зЁб«® ¬®¦® ЁбЇ®«м§®ў вм Ґ Ў®«ҐҐ 祬 Ї® ®¤®¬г а §г.)
ђҐиҐЁҐ. Ѓг¤Ґ¬ § ¤ ў вм k-Ї®§ЁжЁо Ї®б«Ґ¤®ў ⥫м®бвмо Ё§ k
Ўг«ҐўбЄЁе § 票©, ®ЇаҐ¤Ґ«пойЁе, ўе®¤пв «Ё ў б㬬г зЁб«
a[1]..a[k] Ё«Ё Ґ ўе®¤пв. Џ®§ЁжЁп ¤®ЇгбвЁ¬ , Ґб«Ё ҐҐ б㬬 Ґ
ЇаҐў®б室Ёв s.
‡ ¬Ґз ЁҐ. Џ® ба ўҐЁо б Ї®«л¬ ЇҐаҐЎ®а®¬ ўбҐе (2 ў б⥯Ґ-
Ё n) Ї®¤¬®¦Ґбвў вгв Ґбвм ҐЄ®в®ал© ўлЁЈали. Њ®¦® в Є¦Ґ ЇаҐ¤-
ў аЁвҐ«м® ®вб®авЁа®ў вм ¬ ббЁў a ў гЎлў о饬 Ї®ап¤ЄҐ, в Є¦Ґ
бзЁв вм Ґ¤®ЇгбвЁ¬л¬Ё ⥠Ї®§ЁжЁЁ, ў Є®в®але б㬬 ®вЎа®иҐле
з«Ґ®ў Ў®«миҐ, 祬 а §®бвм бг¬¬л ўбҐе з«Ґ®ў Ё s. Џ®б«Ґ¤Ё©
ЇаЁс¬ §лў ов "¬Ґв®¤®¬ ўҐвўҐ© Ё Ја Ёж". Ќ® ЇаЁжЁЇЁ «м®Ј®
г«гзиҐЁп Ї® ба ўҐЁо б Ї®«л¬ ЇҐаҐЎ®а®¬ вгв Ґ Ї®«гз Ґвбп (нв
§ ¤ з , Є Є Ј®ў®апв, NP-Ї®« , б¬. Ї®¤а®Ў®бвЁ ў ЄЁЈҐ Ђе®,
•®ЇЄа®дв Ё “«м¬ "Џ®бв஥ЁҐ Ё «Ё§ ўлзЁб«ЁвҐ«мле «Ј®аЁв-
¬®ў"). ’а ¤ЁжЁ®®Ґ §ў ЁҐ нв®© § ¤ зЁ - "§ ¤ з ® аоЄ§ ЄҐ"
(аоЄ§ Є ®ЎйҐ© Ја㧮Ї®¤кҐ¬®бвмо s 㦮 гЇ Є®ў вм Ї®¤ § ўп§Єг,
а бЇ®« Ј п ЇаҐ¤¬Ґв ¬Ё ўҐб a[1]..a[n]). ‘¬. в Є¦Ґ ў Ј« ўҐ 7
(а §¤Ґ« ® ¤Ё ¬ЁзҐбЄ®¬ Їа®Ја ¬¬Ёа®ў ЁЁ) «Ј®аЁв¬ Ґс аҐиҐЁп,
Ї®«Ё®¬Ё «мл© Ї® n+s.
3.2.2. ЏҐаҐзЁб«Ёвм ўбҐ Ї®б«Ґ¤®ў ⥫м®бвЁ Ё§ n г«Ґ©, Ґ¤Ё-
Ёж Ё ¤ў®ҐЄ, ў Є®в®але ЁЄ Є п ЈагЇЇ жЁда Ґ Ї®ўв®апҐвбп ¤ў
а § Ї®¤ап¤ (Ґв ЄгбЄ ўЁ¤ XX).
3.2.3. Ђ «®ЈЁз п § ¤ з ¤«п Ї®б«Ґ¤®ў ⥫м®б⥩ г«Ґ© Ё
Ґ¤ЁЁж, ў Є®в®але ЁЄ Є п ЈагЇЇ жЁда Ґ Ї®ўв®апҐвбп ваЁ а §
Ї®¤ап¤ (Ґв ЄгбЄ ўЁ¤ XXX).
Љ нв®© ¦Ґ Є ⥣®аЁЁ ®в®бпвбп § ¤ зЁ вЁЇ "¬®¦® «Ё б«®¦Ёвм
¤ го дЁЈгаг Ё§ ЇҐв ¬Ё®" Ё Ё¬ Ї®¤®ЎлҐ. ‚ Ёе ў ¦® 㬥«®Ґ
б®Єа 饨Ґ ЇҐаҐЎ®а (ў®ўаҐ¬п а бЇ®§ вм, зв® Ё¬Ґо饥бп а бЇ®«®-
¦ҐЁҐ дЁЈга®Є 㦥 Їа®вЁў®аҐзЁв вॡ®ў Ёп¬, Ё Ї® нв®© ўҐвўЁ Ї®-
ЁбЄ Ґ Їа®¤®«¦ вм).
3.1. ”Ґа§Ё, Ґ ЎмойЁҐ ¤агЈ ¤агЈ : ®Ўе®¤ ¤ҐаҐў Ї®§ЁжЁ©
‚ ЇаҐ¤л¤г饩 Ј« ўҐ ¬л а бб¬ ваЁў «Ё ҐбЄ®«мЄ® § ¤ з ®¤®Ј®
Ё в®Ј® ¦Ґ вЁЇ : "ЇҐаҐзЁб«Ёвм ўбҐ н«Ґ¬Ґвл ҐЄ®в®а®Ј® ¬®¦Ґбвў
A". ‘奬 аҐиҐЁп Ўл« в Є®ў : ¬®¦Ґб⢥ A ўў®¤Ё«бп Ї®а冷Є Ё
®ЇЁблў « бм Їа®жҐ¤га ЇҐаҐе®¤ ®в Їа®Ё§ў®«м®Ј® н«Ґ¬Ґв ¬®-
¦Ґбвў A Є б«Ґ¤го饬㠧 Ё¬ (ў н⮬ Ї®ап¤ЄҐ). ’ Єго б奬㠥
ўбҐЈ¤ г¤ Ґвбп ॠ«Ё§®ў вм ҐЇ®б।б⢥®, Ё ў нв®© Ј« ўҐ ¬л
а бᬮваЁ¬ ¤агЈ®© Ї®«Ґ§л© ЇаЁҐ¬ ЇҐаҐзЁб«ҐЁп ўбҐе н«Ґ¬Ґв®ў Ґ-
Є®в®а®Ј® ¬®¦Ґбвў . …Ј® §лў ов "Ї®ЁбЄ б ў®§ўа в ¬Ё", "¬Ґв®¤
ўҐвўҐ© Ё Ја Ёж", "backtracking". Ќ и ў§Ј«п¤ ЁЎ®«ҐҐ в®з®Ґ
§ў ЁҐ нв®Ј® ¬Ґв®¤ - ®Ўе®¤ ¤ҐаҐў .
3.1.1. ЏҐаҐзЁб«Ёвм ўбҐ бЇ®б®Ўл а ббв ®ўЄЁ n дҐа§Ґ© и е-
¬ в®© ¤®бЄҐ n n, ЇаЁ Є®в®але ®Ё Ґ Ўмов ¤агЈ ¤агЈ .
ђҐиҐЁҐ. ЋзҐўЁ¤®, Є ¦¤®© Ё§ n Ј®аЁ§®в «Ґ© ¤®«¦® бв®-
пвм Ї® дҐа§о. Ѓг¤Ґ¬ §лў вм k-Ї®§ЁжЁҐ© (¤«п k = 0, 1,...,n)
Їа®Ё§ў®«мго а ббв ®ўЄг k дҐа§Ґ© k Ё¦Ёе Ј®аЁ§®в «пе (дҐа-
§Ё ¬®Јгв ЎЁвм ¤агЈ ¤агЈ ). Ќ аЁб㥬 "¤ҐаҐў® Ї®§ЁжЁ©": ҐЈ® Є®аҐ¬
Ўг¤Ґв Ґ¤Ёб⢥ п 0-Ї®§ЁжЁп, Ё§ Є ¦¤®© k-Ї®§ЁжЁЁ ўл室Ёв n
бв५®Є ўўҐае ў (k+1)-Ї®§ЁжЁЁ. ќвЁ n Ї®§ЁжЁ© ®в«Ёз овбп Ї®«®¦Ґ-
ЁҐ¬ дҐа§п (k+1)-®© Ј®аЁ§®в «Ё. Ѓг¤Ґ¬ бзЁв вм, зв® а бЇ®«®-
¦ҐЁҐ Ёе аЁбгЄҐ ᮮ⢥вбвўгҐв Ї®«®¦ҐЁо нв®Ј® дҐа§п: «ҐўҐҐ
в Ї®§ЁжЁп, ў Є®в®а®© дҐа§м а бЇ®«®¦Ґ «ҐўҐҐ.
„ҐаҐў® Ї®§ЁжЁ© ¤«п
n = 2
‘।Ё Ї®§ЁжЁ© нв®Ј® ¤ҐаҐў ¬ ¤® ®в®Ўа вм ⥠n-Ї®§ЁжЁЁ, ў Є®-
в®але дҐа§Ё Ґ Ўмов ¤агЈ ¤агЈ . Џа®Ја ¬¬ Ўг¤Ґв "®Ўе®¤Ёвм ¤ҐаҐ-
ў®" Ё ЁбЄ вм Ёе. —в®Ўл Ґ ¤Ґ« вм «ЁиҐ© а Ў®вл, § ¬ҐвЁ¬ ў®в зв®:
Ґб«Ё ў Є Є®©-в® k-Ї®§ЁжЁЁ дҐа§Ё Ўмов ¤агЈ ¤агЈ , в® бв ўЁвм
¤ «мҐ©иЁе дҐа§Ґ© б¬лб« Ґв. Џ®н⮬г, ®Ў аг¦Ёў нв®, ¬л Ўг¤Ґ¬
ЇаҐЄа й вм Ї®бв஥ЁҐ ¤ҐаҐў ў н⮬ Їа ў«ҐЁЁ.
’®зҐҐ, §®ўҐ¬ k-Ї®§ЁжЁо ¤®ЇгбвЁ¬®©, Ґб«Ё Ї®б«Ґ г¤ «ҐЁп
ўҐа奣® дҐа§п ®бв ўиЁҐбп Ґ Ўмов ¤агЈ ¤агЈ . Ќ и Їа®Ја ¬¬ Ўг-
¤Ґв а бб¬ ваЁў вм в®«мЄ® ¤®ЇгбвЁ¬лҐ Ї®§ЁжЁЁ.
„ҐаҐў® ¤®ЇгбвЁ¬ле
Ї®§ЁжЁ© ¤«п n = 3
ђ §®ЎмҐ¬ § ¤ зг ¤ўҐ з бвЁ: (1) ®Ўе®¤ Їа®Ё§ў®«м®Ј® ¤ҐаҐ-
ў Ё (2) ॠ«Ё§ жЁо ¤ҐаҐў ¤®ЇгбвЁ¬ле Ї®§ЁжЁ©.
‘д®а¬г«Ёа㥬 § ¤ зг ®Ўе®¤ Їа®Ё§ў®«м®Ј® ¤ҐаҐў . Ѓг¤Ґ¬ бзЁ-
в вм, зв® г б Ё¬ҐҐвбп ђ®Ў®в, Є®в®ал© ў Є ¦¤л© ¬®¬Ґв 室Ёвбп
ў ®¤®© Ё§ ўҐаиЁ ¤ҐаҐў (ўҐаиЁл Ё§®Ўа ¦Ґл аЁбгЄҐ Єа㦮з-
Є ¬Ё). Ћ 㬥Ґв ўлЇ®«пвм Є®¬ ¤л:
ўўҐае_ «Ґў® (Ё¤вЁ Ї® б ¬®© «Ґў®©
Ё§ ўл室пйЁе ўўҐае бв५®Є)
ўЇа ў® (ЇҐаҐ©вЁ ў б®бҐ¤оо бЇа ў
ўҐаиЁг)
ўЁ§ (бЇгбвЁвмбп ўЁ§ ®¤Ё га®-
ўҐм)
ўўҐае_ «Ґў®
ўЇа ў®
ўЁ§
Ё Їа®ўҐаЄЁ, ᮮ⢥вбвўгойЁҐ ў®§¬®¦®бвЁ ўлЇ®«Ёвм Є ¦¤го Ё§ Є®-
¬ ¤, §лў Ґ¬лҐ "Ґбвм_ᢥаег", "Ґбвм_бЇа ў ", "Ґбвм_бЁ§г"
(Ї®б«Ґ¤пп ЁбвЁ ўбо¤г, Єа®¬Ґ Є®ап). ЋЎа вЁвҐ ўЁ¬ ЁҐ, зв®
Є®¬ ¤ "ўЇа ў®" Ї®§ў®«пҐв ЇҐаҐ©вЁ «Ёим Є "த®¬г Ўа вг", ® Ґ
Є "¤ў®оத®¬г".
’ Є Є®¬ ¤ "ўЇа ў®"
Ќ… ¤Ґ©бвўгҐв!
Ѓг¤Ґ¬ бзЁв вм, зв® г ђ®Ў®в Ґбвм Є®¬ ¤ "®Ўа Ў®в вм" Ё зв®
ҐЈ® § ¤ з - ®Ўа Ў®в вм ўбҐ «Ёбвмп (ўҐаиЁл, Ё§ Є®в®але Ґв
бв५®Є ўўҐае, в® Ґбвм Ј¤Ґ гб«®ўЁҐ "Ґбвм_ᢥаег" «®¦®). „«п -
襩 и е¬ в®© § ¤ зЁ Є®¬ ¤Ґ ®Ўа Ў®в вм Ўг¤Ґв ᮮ⢥вбвў®ў вм
Їа®ўҐаЄ Ё ЇҐз вм Ї®§ЁжЁЁ дҐа§Ґ©.
„®Є § ⥫мбвў® Їа ўЁ«м®бвЁ ЇаЁў®¤Ё¬®© ¤ «ҐҐ Їа®Ја ¬¬л Ёб-
Ї®«м§гҐв в ЄЁҐ ®ЇаҐ¤Ґ«ҐЁп. Џгбвм дЁЄбЁа®ў ® Ї®«®¦ҐЁҐ ђ®Ў®в ў
®¤®© Ё§ ўҐаиЁ ¤ҐаҐў . ’®Ј¤ ўбҐ «Ёбвмп ¤ҐаҐў а §ЎЁў овбп
ваЁ Є ⥣®аЁЁ: ¤ ђ®Ў®в®¬, «ҐўҐҐ ђ®Ў®в Ё Їа ўҐҐ ђ®Ў®в . (Џгвм
Ё§ Є®ап ў «Ёбв ¬®¦Ґв Їа®е®¤Ёвм зҐаҐ§ ўҐаиЁг б ђ®Ў®в®¬, бў®а -
зЁў вм ў«Ґў®, Ґ ¤®е®¤п ¤® ҐҐ Ё бў®а зЁў вм ўЇа ў®, Ґ ¤®е®¤п
¤® ҐҐ.) —ҐаҐ§ (Ћ‹) ®Ў®§ зЁ¬ гб«®ўЁҐ "®Ўа Ў®в л ўбҐ «Ёбвмп «Ґ-
ўҐҐ ђ®Ў®в ", зҐаҐ§ (Ћ‹Ќ) - гб«®ўЁҐ "®Ўа Ў®в л ўбҐ «Ёбвмп «Ґ-
ўҐҐ Ё ¤ ђ®Ў®в®¬".
Ќ ¬ Ї® ¤®ЎЁвбп в Є п Їа®жҐ¤га :
procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
| {¤ ®: (Ћ‹), ¤®: (Ћ‹Ќ)}
begin
| {Ёў аЁ в: Ћ‹}
| while Ґбвм_ᢥаег do begin
| | ўўҐае_ «Ґў®
| end
| {Ћ‹, ђ®Ў®в ў «ЁбвҐ}
| ®Ўа Ў®в вм;
| {Ћ‹Ќ}
end;
Ћб®ў®© «Ј®аЁв¬:
¤ ®: ђ®Ў®в ў Є®аҐ, «Ёбвмп Ґ ®Ўа Ў®в л
¤®: ђ®Ў®в ў Є®аҐ, «Ёбвмп ®Ўа Ў®в л
{Ћ‹}
ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
{Ёў аЁ в: Ћ‹Ќ}
while Ґбвм_бЁ§г do begin
| if Ґбвм_бЇа ў then begin {Ћ‹Ќ, Ґбвм бЇа ў }
| | ўЇа ў®;
| | {Ћ‹}
| | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
| end else begin
| | {Ћ‹Ќ, Ґ Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| end;
end;
{Ћ‹Ќ, ђ®Ў®в ў Є®аҐ => ўбҐ «Ёбвмп ®Ўа Ў®в л}
Ћбв «®бм ў®бЇ®«м§®ў вмбп б«Ґ¤гойЁ¬Ё бў®©бвў ¬Ё Є®¬ ¤ ђ®Ў®в
(ᢥаег § ЇЁб л гб«®ўЁп, ў Є®в®але ўлЇ®«пҐвбп Є®¬ ¤ , бЁ§г -
г⢥তҐЁп ® १г«мв ⥠ҐҐ ўлЇ®«ҐЁп):
(1) {Ћ‹, Ґ Ґбвм_ᢥаег} (2) {Ћ‹}
®Ўа Ў®в вм ўўҐае_ «Ґў®
{Ћ‹Ќ} {Ћ‹}
(3) {Ґбвм_бЇа ў , Ћ‹Ќ} (4) {Ґ Ґбвм_бЇа ў , Ћ‹Ќ}
ўЇа ў® ўЁ§
{Ћ‹} {Ћ‹Ќ}
3.1.2. „®Є § вм, зв® ЇаЁўҐ¤Ґ п Їа®Ја ¬¬ § ўҐаи Ґв а Ў®вг
( «оЎ®¬ Є®Ґз®¬ ¤ҐаҐўҐ).
ђҐиҐЁҐ. Џа®жҐ¤га ўўҐае_ «Ґў® § ўҐаи Ґв а Ў®вг (ўлб®в
ђ®Ў®в Ґ ¬®¦Ґв 㢥«ЁзЁў вмбп ЎҐбЄ®Ґз®). …б«Ё Їа®Ја ¬¬ а Ў®-
в Ґв ЎҐбЄ®Ґз®, в®, Ї®бЄ®«мЄг «Ёбвмп Ґ ®Ўа Ў влў овбп Ї®ўв®а-
®, зЁ п б ҐЄ®в®а®Ј® ¬®¬Ґв Ё ®¤Ё «Ёбв Ґ ®Ўа Ў влў Ґвбп.
Ђ нв® ў®§¬®¦®, в®«мЄ® Ґб«Ё ђ®Ў®в ўбҐ ўаҐ¬п бЇгбЄ Ґвбп ўЁ§.
Џа®вЁў®аҐзЁҐ. (ЋЎ ®жҐЄҐ зЁб« ¤Ґ©бвўЁ© б¬. ¤ «ҐҐ.)
3.1.3. „®Є § вм Їа ўЁ«м®бвм б«Ґ¤го饩 Їа®Ја ¬¬л ®Ўе®¤ ¤Ґ-
ॢ :
var state: (WL, WLU);
state := WL;
while Ґбвм_бЁ§г or (state <> WLU) do begin
| if (state = WL) and Ґбвм_ᢥаег then begin
| | ўўҐае;
| end else if (state = WL) and not Ґбвм_ᢥаег then begin
| | ®Ўа Ў®в вм; state := WLU;
| end else if (state = WLU) and Ґбвм_бЇа ў then begin
| | ўЇа ў®; state := WL;
| end else begin {state = WLU, not Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| end;
end;
ђҐиҐЁҐ. €ў аЁ в жЁЄ« :
state = WL => Ћ‹
state = WLU => Ћ‹Ќ
„®Є § ⥫мбвў® § ўҐа襨п а Ў®вл: ЇҐаҐе®¤ Ё§ б®бв®пЁп Ћ‹ ў Ћ‹Ќ
ў®§¬®¦Ґ в®«мЄ® ЇаЁ ®Ўа Ў®вЄҐ ўҐаиЁл, Ї®н⮬㠥᫨ Їа®Ја ¬¬
а Ў®в Ґв ЎҐбЄ®Ґз®, в® б ҐЄ®в®а®Ј® ¬®¬Ґв § 票Ґ state Ґ
¬ҐпҐвбп, зв® Ґў®§¬®¦®.
3.1.4. ђҐиЁвм § ¤ зг ®Ў ®Ўе®¤Ґ ¤ҐаҐў , Ґб«Ё ¬л е®вЁ¬, зв®Ўл
®Ўа Ў влў «Ёбм ўбҐ ўҐаиЁл (Ґ в®«мЄ® «Ёбвмп).
ђҐиҐЁҐ. Џгбвм x - ҐЄ®в®а п ўҐаиЁ . ’®Ј¤ «оЎ п ўҐаиЁ y
®в®бЁвбп Є ®¤®© Ё§ зҐвлаҐе Є ⥣®аЁ©. ђ бᬮваЁ¬ Їгвм Ё§ Є®ап
ў y. Ћ ¬®¦Ґв:
( ) Ўлвм з бвмо ЇгвЁ Ё§ Є®ап ў x (y Ё¦Ґ x);
(Ў) ᢥагвм «Ґў® б ЇгвЁ ў x (y «ҐўҐҐ x);
(ў) Їа®©вЁ зҐаҐ§ x (y ¤ x);
(Ј) ᢥагвм Їа ў® б ЇгвЁ ў x (y Їа ўҐҐ x);
‚ з бв®бвЁ, б ¬ ўҐаиЁ x ®в®бЁвбп Є Є ⥣®аЁЁ (ў). “б«®ўЁп
⥯Ґам Ўг¤гв в ЄЁ¬Ё:
(ЋЌ‹) ®Ўа Ў®в л ўбҐ ўҐаиЁл Ё¦Ґ Ё «ҐўҐҐ;
(ЋЌ‹Ќ) ®Ўа Ў®в л ўбҐ ўҐаиЁл Ё¦Ґ, «ҐўҐҐ Ё ¤.
‚®в Є Є Ўг¤Ґв ўлЈ«п¤Ґвм Їа®Ја ¬¬ :
procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
| {¤ ®: (ЋЌ‹), ¤®: (ЋЌ‹Ќ)}
begin
| {Ёў аЁ в: ЋЌ‹}
| while Ґбвм_ᢥаег do begin
| | ®Ўа Ў®в вм
| | ўўҐае_ «Ґў®
| end
| {ЋЌ‹, ђ®Ў®в ў «ЁбвҐ}
| ®Ўа Ў®в вм;
| {ЋЌ‹Ќ}
end;
Ћб®ў®© «Ј®аЁв¬:
¤ ®: ђ®Ў®в ў Є®аҐ, ЁзҐЈ® Ґ ®Ўа Ў®в ®
¤®: ђ®Ў®в ў Є®аҐ, ўбҐ ўҐаиЁл ®Ўа Ў®в л
{ЋЌ‹}
ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
{Ёў аЁ в: ЋЌ‹Ќ}
while Ґбвм_бЁ§г do begin
| if Ґбвм_бЇа ў then begin {ЋЌ‹Ќ, Ґбвм бЇа ў }
| | ўЇа ў®;
| | {ЋЌ‹}
| | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
| end else begin
| | {Ћ‹Ќ, Ґ Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| end;
end;
{ЋЌ‹Ќ, ђ®Ў®в ў Є®аҐ => ўбҐ ўҐаиЁл ®Ўа Ў®в л}
3.1.5. ЏаЁўҐ¤Ґ п в®«мЄ® зв® Їа®Ја ¬¬ ®Ўа Ў влў Ґв ўҐаиЁ-
г ¤® в®Ј®, Є Є ®Ўа Ў®в «оЎ®© Ё§ ҐҐ Ї®в®¬Є®ў. Љ Є Ё§¬ҐЁвм ҐҐ,
зв®Ўл Є ¦¤ п ўҐаиЁ , Ґ пў«пой пбп «Ёб⮬, ®Ўа Ў влў « бм ¤ў ¦-
¤л: ®¤Ё а § ¤®, ¤агЈ®© а § Ї®б«Ґ ўбҐе бў®Ёе Ї®в®¬Є®ў? (‹Ёбвмп
Ї®-ЇаҐ¦Ґ¬г ®Ўа Ў влў овбп Ї® а §г.)
ђҐиҐЁҐ. Џ®¤ "®Ўа Ў®в ® Ё¦Ґ Ё «ҐўҐҐ" Ўг¤Ґ¬ Ї®Ё¬ вм "Ё¦Ґ
®Ўа Ў®в ® Ї® а §г, б«Ґў ®Ўа Ў®в ® Ї®«®бвмо («Ёбвмп Ї® а §г,
®бв лҐ Ї® ¤ў )". Џ®¤ "®Ўа Ў®в ® Ё¦Ґ, «ҐўҐҐ Ё ¤" Ўг¤Ґ¬ Ї®Ё-
¬ вм "Ё¦Ґ ®Ўа Ў®в ® Ї® а §г, «ҐўҐҐ Ё ¤ - Ї®«®бвмо".
Џа®Ја ¬¬ Ўг¤Ґв в Є®©:
procedure ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
| {¤ ®: (ЋЌ‹), ¤®: (ЋЌ‹Ќ)}
begin
| {Ёў аЁ в: ЋЌ‹}
| while Ґбвм_ᢥаег do begin
| | ®Ўа Ў®в вм
| | ўўҐае_ «Ґў®
| end
| {ЋЌ‹, ђ®Ў®в ў «ЁбвҐ}
| ®Ўа Ў®в вм;
| {ЋЌ‹Ќ}
end;
Ћб®ў®© «Ј®аЁв¬:
¤ ®: ђ®Ў®в ў Є®аҐ, ЁзҐЈ® Ґ ®Ўа Ў®в ®
¤®: ђ®Ў®в ў Є®аҐ, ўбҐ ўҐаиЁл ®Ўа Ў®в л
{ЋЌ‹}
ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм
{Ёў аЁ в: ЋЌ‹Ќ}
while Ґбвм_бЁ§г do begin
| if Ґбвм_бЇа ў then begin {ЋЌ‹Ќ, Ґбвм бЇа ў }
| | ўЇа ў®;
| | {ЋЌ‹}
| | ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм;
| end else begin
| | {Ћ‹Ќ, Ґ Ґбвм_бЇа ў , Ґбвм_бЁ§г}
| | ўЁ§;
| | ®Ўа Ў®в вм;
| end;
end;
{ЋЌ‹Ќ, ђ®Ў®в ў Є®аҐ => ўбҐ ўҐаиЁл ®Ўа Ў®в л Ї®«®бвмо}
3.1.6. „®Є § вм, зв® зЁб«® ®ЇҐа жЁ© ў нв®© Їа®Ја ¬¬Ґ Ї® Ї®-
ап¤Єг а ў® зЁб«г ўҐаиЁ ¤ҐаҐў . (Љ Є Ё ў ¤агЈЁе Їа®Ја ¬¬ е, Є®-
в®алҐ ®в«Ёз овбп ®в нв®© «Ёим Їа®ЇгбЄ®¬ ҐЄ®в®але Є®¬ ¤ "®Ўа -
Ў®в вм".)
“Є § ЁҐ. ЏаЁ¬Ґа® Є ¦¤®Ґ ўв®а®Ґ ¤Ґ©бвўЁҐ ЇаЁ ЁбЇ®«ҐЁЁ
нв®© Їа®Ја ¬¬л - ®Ўа Ў®вЄ ўҐаиЁл, Є ¦¤ п ўҐаиЁ ®Ўа Ў влў -
Ґвбп ¬ ЄбЁ¬г¬ ¤ў ¦¤л.
’ҐЇҐам ॠ«Ё§гҐ¬ ®ЇҐа жЁЁ б ¤ҐаҐў®¬ Ї®§ЁжЁ©. Џ®§ЁжЁо Ўг¤Ґ¬
ЇаҐ¤бв ў«пвм б Ї®¬®ймо ЇҐаҐ¬Ґ®© k: 0..n (зЁб«® дҐа§Ґ©) Ё ¬ б-
бЁў c: array [1..n] of 1..n (c [i] - Є®®а¤Ё вл дҐа§п i-®©
Ј®аЁ§®в «Ё; ЇаЁ i > k § 票Ґ c [i] а®«Ё Ґ ЁЈа Ґв). ЏаҐ¤Ї®« -
Ј Ґвбп, зв® ўбҐ Ї®§ЁжЁЁ ¤®ЇгбвЁ¬л (Ґб«Ё гЎа вм ўҐа奣® дҐа§п,
®бв «млҐ Ґ Ўмов ¤агЈ ¤агЈ ).
program queens;
| const n = ...;
| var
| k: 0..n;
| c: array [1..n] of 1..n;
|
| procedure begin_work; { з вм а Ў®вг}
| begin
| | k := 0;
| end;
|
| function danger: boolean; {ўҐаеЁ© дҐа§м Ї®¤ Ў®Ґ¬}
| | var b: boolean; i: integer;
| begin
| | if k <= 1 then begin
| | | danger := false;
| | end else begin
| | | b := false; i := 1;
| | | {b <=> ўҐаеЁ© дҐа§м Ї®¤ Ў®Ґ¬ дҐа§Ґ© б ®¬Ґа ¬Ё < i}
| | | while i <> k do begin
| | | | b := b or (c[i]=c[k]) {ўҐавЁЄ «м}
| | | | or (abs(c[[i]-c[k]))=abs(i-k)); {¤Ё Ј® «м}
| | | | i := i+ 1;
| | | end;
| | | danger := b;
| | end;
| end;
|
| function is_up: boolean {Ґбвм_ᢥаег}
| begin
| | is_up := (k < n) and not danger;
| end;
|
| function is_right: boolean {Ґбвм_бЇа ў }
| begin
| | is_right := (k > 0) and (c[k] < n);
| end;
| {ў®§¬®¦ ®иЁЎЄ : ЇаЁ k=0 Ґ ®ЇаҐ¤Ґ«Ґ® c[k]}
|
| function is_down: boolean {Ґбвм_бЁ§г}
| begin
| | is_up := (k > 0);
| end;
|
| procedure up; {ўўҐае_ «Ґў®}
| begin {k < n}
| | k := k + 1;
| | c [k] := 1;
| end;
|
| procedure right; {ўЇа ў®}
| begin {k > 0, c[k] < n}
| | c [k] := c [k] + 1;
| end;
|
| procedure down; {ўЁ§}
| begin {k > 0}
| | k := k - 1;
| end;
|
| procedure work; {®Ўа Ў®в вм}
| | var i: integer;
| begin
| | if (k = n) and not danger then begin
| | | for i := 1 to n do begin
| | | | write ('<', i, ',' , c[i], '> ');
| | | end;
| | | writeln;
| | end;
| end;
|
| procedure UW; {ўўҐае_¤®_гЇ®а _Ё_®Ўа Ў®в вм}
| begin
| | while is_up do begin
| | | up;
| | end
| | work;
| end;
|
begin
| begin_work;
| UW;
| while is_down do begin
| | if is_right then begin
| | | right;
| | | UW;
| | end else begin
| | | down;
| | end;
| end;
end.
3.1.7. ЏаЁўҐ¤Ґ п Їа®Ја ¬¬ ва вЁв ¤®ў®«м® ¬®Ј® ўаҐ¬ҐЁ
ўлЇ®«ҐЁҐ Їа®ўҐаЄЁ Ґбвм_ᢥаег (Їа®ўҐаЄ , 室Ёвбп «Ё
ўҐаеЁ© дҐа§м Ї®¤ Ў®Ґ¬, вॡгҐв зЁб« ¤Ґ©бвўЁ© Ї®ап¤Є n). €§¬Ґ-
Ёвм ॠ«Ё§ жЁо ®ЇҐа жЁ© б ¤ҐаҐў®¬ Ї®§ЁжЁ© в Є, зв®Ўл ўбҐ ваЁ
Їа®ўҐаЄЁ Ґбвм_ᢥаег/бЇа ў /бЁ§г Ё ᮮ⢥вбвўгойЁҐ Є®¬ ¤л ваҐ-
Ў®ў «Ё Ўл Є®«ЁзҐбвў ¤Ґ©бвўЁ©, ®Ја ЁзҐ®Ј® Ґ § ўЁбп饩 ®в n
Є®бв в®©.
ђҐиҐЁҐ. „«п Є ¦¤®© ўҐавЁЄ «Ё, Є ¦¤®© ў®б室п饩 Ё Є ¦¤®©
Ёб室п饩 ¤Ё Ј® «Ё Ўг¤Ґ¬ еа Ёвм Ўг«ҐўбЄ®Ґ § 票Ґ - ᢥ¤ҐЁп
® ⮬, 室Ёвбп «Ё нв®© «ЁЁЁ дҐа§м (ўҐаеЁ© дҐа§м Ґ гзЁвл-
ў Ґвбп). (‡ ¬ҐвЁ¬, зв® ў бЁ«г ¤®ЇгбвЁ¬®бвЁ Ї®§ЁжЁЁ Є ¦¤®© Ё§
«ЁЁ© ¬®¦Ґв Ўлвм Ґ Ў®«ҐҐ ®¤®Ј® дҐа§п.).
3.2. ЋЎе®¤ ¤ҐаҐў ў ¤агЈЁе § ¤ з е.
3.2.1. €бЇ®«м§®ў вм ¬Ґв®¤ ®Ўе®¤ ¤ҐаҐў ¤«п аҐиҐЁп б«Ґ¤г-
о饩 § ¤ зЁ: ¤ ¬ ббЁў Ё§ n 楫ле Ї®«®¦ЁвҐ«мле зЁбҐ«
a[1]..a[n] Ё зЁб«® s; вॡгҐвбп г§ вм, ¬®¦Ґв «Ё зЁб«® s Ўлвм
ЇаҐ¤бв ў«Ґ® Є Є б㬬 ҐЄ®в®але Ё§ зЁбҐ« ¬ ббЁў a. (Љ ¦¤®Ґ
зЁб«® ¬®¦® ЁбЇ®«м§®ў вм Ґ Ў®«ҐҐ 祬 Ї® ®¤®¬г а §г.)
ђҐиҐЁҐ. Ѓг¤Ґ¬ § ¤ ў вм k-Ї®§ЁжЁо Ї®б«Ґ¤®ў ⥫м®бвмо Ё§ k
Ўг«ҐўбЄЁе § 票©, ®ЇаҐ¤Ґ«пойЁе, ўе®¤пв «Ё ў б㬬г зЁб«
a[1]..a[k] Ё«Ё Ґ ўе®¤пв. Џ®§ЁжЁп ¤®ЇгбвЁ¬ , Ґб«Ё ҐҐ б㬬 Ґ
ЇаҐў®б室Ёв s.
‡ ¬Ґз ЁҐ. Џ® ба ўҐЁо б Ї®«л¬ ЇҐаҐЎ®а®¬ ўбҐе (2 ў б⥯Ґ-
Ё n) Ї®¤¬®¦Ґбвў вгв Ґбвм ҐЄ®в®ал© ўлЁЈали. Њ®¦® в Є¦Ґ ЇаҐ¤-
ў аЁвҐ«м® ®вб®авЁа®ў вм ¬ ббЁў a ў гЎлў о饬 Ї®ап¤ЄҐ, в Є¦Ґ
бзЁв вм Ґ¤®ЇгбвЁ¬л¬Ё ⥠Ї®§ЁжЁЁ, ў Є®в®але б㬬 ®вЎа®иҐле
з«Ґ®ў Ў®«миҐ, 祬 а §®бвм бг¬¬л ўбҐе з«Ґ®ў Ё s. Џ®б«Ґ¤Ё©
ЇаЁс¬ §лў ов "¬Ґв®¤®¬ ўҐвўҐ© Ё Ја Ёж". Ќ® ЇаЁжЁЇЁ «м®Ј®
г«гзиҐЁп Ї® ба ўҐЁо б Ї®«л¬ ЇҐаҐЎ®а®¬ вгв Ґ Ї®«гз Ґвбп (нв
§ ¤ з , Є Є Ј®ў®апв, NP-Ї®« , б¬. Ї®¤а®Ў®бвЁ ў ЄЁЈҐ Ђе®,
•®ЇЄа®дв Ё “«м¬ "Џ®бв஥ЁҐ Ё «Ё§ ўлзЁб«ЁвҐ«мле «Ј®аЁв-
¬®ў"). ’а ¤ЁжЁ®®Ґ §ў ЁҐ нв®© § ¤ зЁ - "§ ¤ з ® аоЄ§ ЄҐ"
(аоЄ§ Є ®ЎйҐ© Ја㧮Ї®¤кҐ¬®бвмо s 㦮 гЇ Є®ў вм Ї®¤ § ўп§Єг,
а бЇ®« Ј п ЇаҐ¤¬Ґв ¬Ё ўҐб a[1]..a[n]). ‘¬. в Є¦Ґ ў Ј« ўҐ 7
(а §¤Ґ« ® ¤Ё ¬ЁзҐбЄ®¬ Їа®Ја ¬¬Ёа®ў ЁЁ) «Ј®аЁв¬ Ґс аҐиҐЁп,
Ї®«Ё®¬Ё «мл© Ї® n+s.
3.2.2. ЏҐаҐзЁб«Ёвм ўбҐ Ї®б«Ґ¤®ў ⥫м®бвЁ Ё§ n г«Ґ©, Ґ¤Ё-
Ёж Ё ¤ў®ҐЄ, ў Є®в®але ЁЄ Є п ЈагЇЇ жЁда Ґ Ї®ўв®апҐвбп ¤ў
а § Ї®¤ап¤ (Ґв ЄгбЄ ўЁ¤ XX).
3.2.3. Ђ «®ЈЁз п § ¤ з ¤«п Ї®б«Ґ¤®ў ⥫м®б⥩ г«Ґ© Ё
Ґ¤ЁЁж, ў Є®в®але ЁЄ Є п ЈагЇЇ жЁда Ґ Ї®ўв®апҐвбп ваЁ а §
Ї®¤ап¤ (Ґв ЄгбЄ ўЁ¤ XXX).
Љ нв®© ¦Ґ Є ⥣®аЁЁ ®в®бпвбп § ¤ зЁ вЁЇ "¬®¦® «Ё б«®¦Ёвм
¤ го дЁЈгаг Ё§ ЇҐв ¬Ё®" Ё Ё¬ Ї®¤®ЎлҐ. ‚ Ёе ў ¦® 㬥«®Ґ
б®Єа 饨Ґ ЇҐаҐЎ®а (ў®ўаҐ¬п а бЇ®§ вм, зв® Ё¬Ґо饥бп а бЇ®«®-
¦ҐЁҐ дЁЈга®Є 㦥 Їа®вЁў®аҐзЁв вॡ®ў Ёп¬, Ё Ї® нв®© ўҐвўЁ Ї®-
ЁбЄ Ґ Їа®¤®«¦ вм).
Соседние файлы в папке Шень