2. Հանոյանաշտարակներ Թադևոս Մարկոսյան, Արտաշես Կիզոգյան (12-րդ դասարան) Նախծրագիրըխաղալուհնարավորություն է տալիսօգտվողին: Խաղինպատակն է տեղափոխելբոլորսկավառակներըառաջինառանցքիցերկրորդկամերրորդ: Խաղացողինհնարավորություն է տրվումսկավառակներըտեղափոխելմիառանցքիցմյուսըայնդեպքում, եթեընդունողառանցքըդատարկ է կամսկավառակըավելիփոքր է այնսկավառակից, որիվրադրվում է (անթույլատրելիտեղափոխություններըչենկատարվում):
3. Սկավառակըտեղափոխելուհամարպետք է կտցնելմկնիկովուղարկողառանցքիտիրույթում և հետոստացողառանցքիտիրույթում: Երկուհարևանառանցքներիմիջևնեղտիրույթումկամառանցքներիկատարներիցվերկտցնելըչեղյալ է հայտարարումառաջինկտոցիհետևանքը: Երկրորդ՝ ծրագիրըկարող է ինքնուրույնտեղափոխելսկավառակներնառաջինառանցքիցերկրորդկամերրորդ: Demo_1 կամ Demo_2 կոճակինսեղմելովակտիվացնումենքսկավառակներնինքնուրույնտեղափոխողծրագիրը (առաջինդեպքում` երրորդառանցք, իսկ
4. երկրորդդեպքում` երկրորդառանցք): Լուծումըտրվում է Demo_ պրոցեդուրայիգործողությամբ, որնօգտագործում է րեկուրսիվկանչեր: Ինչպես՞ է նակարողանումլուծելայսխնդիրը: Փորձեմտրամաբանելնրափոխարեն: Այսպես. ինձկանչումեն, երբպետք է լուծելայսխնդիրը: Րեկուրսիայիսկզբունքըենթադրում է, որեսկարողեմկատարելխնդրիմիմասը (թեկուզշատփոքր), և կարողեմկանչել (անհրաժեշտությանդեպքումմիքանիանգամ) ճիշտինձնմանաշխատողի և նրանառաջադրանքտալ: Իմկողմիցկանչվածաշխատողըկարող է կատարելնույնատիպգործողություն, այսինքն՝ կարող է ի կատարածելաշխատանքիմիմասը, ինչպեսնաև
5. կանչելմեկուրիշկրկնօրինակի և տալնրանառաջադրանք, և այդպեսշարունակ: Այսպիսով, եսպետք է կազմեմայնպիսիալգորիթմ, որպեսզիես և իմկողմիցկանչված (մեկըմյուսիմիջոցով) աշխատողներըկարողանանքլուծելտրվածխնդիրը: Սկսումեմտրամաբանելհետևյալկերպ: Դիցուք` եսպետք է տեղափոխեմտրվածառանցքիվրա n թվովսկավառակներ: Եթե n=1 այդմիակսկավառակըինքսկտեղափոխեմ` դամեծջանքչիպահանջումինձնից: Իսկեթե n>1: Ենթադրենք, որանգամերկուսկավառակտեղափոխելըինձհամարանլուծելիխնդիր է, այդդեպքումեսկկանչեմօգնականիս
6. (ճիշտինձնմանակին) և կառաջարկեմնրանտեղափոխելվերին n-1 սկավառակներըբուֆերայինառանցքին (դաոչայնառանցքն է, որիցեսպետք է n հատսկավառակներտեղափոխեմ, և ոչէլընդունողառանցքն է, որինպետք է տեղափոխեի n սկավառակներ): Եթեիմկողմիցկանչվածօգնականըկատարիտրվածխնդիրը (դեռհարց է՝ նակարող է դաանել), ապաեսկտեղափոխեմմնացածներքևիսկավառակըընդունողառանցքին (դաեսկարողեմանել), որիցհետոնորիցկկանչեմօգնականիս (նույնինթեմեկուրիշի` կարևորչէ, քանիորնրանքնմանեն) և կառաջարկեմնրանընդունողառանցքինտեղափոխելայն n-1 սկավառակները, որոնքավելիվաղ
7. տեղափոխվելէինօգնականիկողմիցբուֆերայինառանցքին (դեռհարց է՝ կկարողանաարդյոքնակատարելտրվածխնդիրը): Այսպիսով, եսկկարողնամտեղափոխել n սկավառակները, եթեիմօգնականներըտեղափոխեն n-1 սկավառակները: Իհարկե, եթեինձհամարերկուսկավառակներիցավելիտեղափոխելըանլուծելիխնդիր է, ապաայնանլուծելիկլինինաևիմօգնականներիհամար: Սակայն, նրանցխնդիրըիմինիցհեշտ է, քանիորնրանքպետք է տեղափոխենմեկովավելիքիչսկավառակ, քանես: Ավելացնենքնաև, որնրանքկարողենինձնմանվարվել, այսինքն՝ կանչելուրիշօգնականների և յուրաքանչյուրինառաջարկել
8. տեղափոխելումեկսկավառակովպակաս, քանինքը: Այսպիսով՝ իմօգնականներըկլուծենտրվածխնդիրը, եթենրանցօգնականներըկարողանանլուծելիրենցխնդիրը: Եվկրկին, վերջիններիսխնդիրնավելիհեշտ է՝ իմօգնականներիխնդրից, քանիորնրանքպետք է տեղափոխեն n-2 սկավառակներ: Իհարկեենթադրվում է, որիմօգնականներիօգնականներընույնպեսկարողենառաջարկելմեկովքիչթվովսկավառակներիտեղափոխությունըիրենցօգնականներին՝ ինքնուրույնկատարելովմիայնմեկսկավառակիտեղափոխություն: Եթեբոլորաշխատողներըսկսենսեփական
9. խնդիրներըառաջարկելօգնականներին (հեշտացնելովխնդիրըտեղափոխվողսկավառակներիթիվըմեկովպակասեցնելով), ապամիպահկլինի, որհերթականաշխատողինկմնատեղափոխելուընդամենըմեկսկավառակ, իսկդակարող է կատարելյուրաքանչյուրը։ Եվնակկատարիայդգործողությունըինքնուրույն: Դավճռորոշպահն է: Քանիորյուրաքանչյուրաշխատողիխնդրիլուծումըհնարավորէրայնպայմանով, որլուծվածկլինեիննրակողմիցիրօգնականներինառաջադրվածխնդիրները, իսկայդշղթայիամենավերջինաշխատողըխնդիրըինքնուրույն է կատարել: Դանշանակում է, որիրսեփականխնդիրըկկարողանակատարելնաևայնաշխատողը, որընրան
10. խնդիրէրառաջարկել. և այդպեսամբողջշղթան՝ վարիցվեր: Դանշանակում է, որնաևեսկկարողանամկատարելինձառաջադրվածխնդիրը: Իհարկեյուրաքանչյուրոք, ումտրված է սկավառակտեղափոխելուառաջադրանք, պարտավոր է ծրագիրըկազմելիսսահմանելիրօգնականներիհամար, թեորառանցքից և որիվրապետք է տեղափոխելսկավառակներ: Վերընշվածը Demo_ պրոցեդուրայինկատմամբվերոհիշյալըկընդունիհետևյալտեսք: Խնդիրըշարադրված է, այնպարամետրերով, որոնքփոխանցվումենպրոցեդուրային (առաջինպարամետրըորոշում է այնառանցքը, որից
11. սկավառակներենտեղափոխում, երկրորդը` տեղափոխվողսկավառակներիքանակը, երրորդը` առանցքը, որիվրա Demo_-ն պետք է տեղափոխիսկավառակներ): Եթեպահանջվում է տեղափոխելմեկսկավառակ, ապաայդգործողությունըայնկատարում է ինքնուրույն, և դրանովնրաաշխատանքըավարտվում է: Իսկեթեպահանջվում է մեկիցավելիսկավառակներտեղափոխել, ապաայն. - կանչում է ինքնիրենայնպարամետրերով, որոնքբխումենմեկովքիչսկավառակներիտեղափոխությանպահանջից՝ այնառանցքից, որիցսկավառակներպետք է տեղափոխելբուֆերայինառանցքիվրա
12. (այն, որըչիհիշատակվումառաջին և երրորդպարամետրերում). - կառավարումըստանալուցհետոտեղափոխում է մնացածամենավերինսկավառակըայնառանցքից, որիցինքըպետք է տեղափոխերսկավառակներայնառանցքիվրա, որինինքըպետք է տեղափոխերսկավառակներ. - կանչում է ինքնիրենայնպարամետրերով, որոնքորոշումենմեկովքիչսկավառակներիտեղափոխությունբուֆերայինառանցքիցայնառանցքիվրա, որինինքըպետք է տեղափոխերսկավառակներ: Հենցայդպեսէլաշխատում է Demo_ պրոցեդուրան: