Hanoi turnuri

Există trei bare A, B și C. Există discuri N pe tija A, cea mai mică din partea de sus, fiecare disc următor este mai mare decât discul anterior, iar partea de jos este cea mai mare. Pe celelalte bare de discuri nu este purtat.

roțile de transfer Requisite de ax A la tija C utilizând tija B, ca auxiliar, astfel încât roțile de pe tija C aranjate în aceeași ordine în care acestea sunt situate pe disc A înainte de a trece.

Când vă mișcați, nu puteți pune vreodată un disc mai mare pe unul mai mic.

Metoda recursivă

Pentru a schimba piramida, este necesar ca mai întâi să treacă ceva deasupra celui mai mare disc din primul tija de susținere, atunci schimbarea este disc foarte mare de la primul la al treilea terminal, iar apoi schimba restul piramidei de la al doilea la al treilea tija, folosind primul stem ca auxiliar.

În total, se obțin 2 schimbări N-1.

Metoda nerecursivă

Tija pe care sunt discurile la început, vom da numărul 0; tija pe care trebuie mutată - numărul 2; și, în consecință, restul tijei - numărul 1.

Să fie doar N. Să numărăm discurile în ordine crescătoare a razei cu numerele de 0,1,2. N-1.

După cum se știe, problema este rezolvată pentru 2 mutări N-1. Numim miscările cu numerele 1,2. 2 N-1.

Orice număr întreg pozitiv i este reprezentat în mod unic în forma i = (2t + 1) * 2 k. unde t și k - întreg (adică, ca un produs al unui număr impar la o anumită putere de doi). Deci, în i-lea transferat în timpul numarul discului k cu un număr tijă ((-1) N-k * t mod 3) pe numărul tijă ((-1) N-k * (t + 1) mod 3).

în cazul în care ppedstavit tijele, care a fost apoi pe rochie paspolozheny conduce în yglah pavnostoponnego tpeygolnika, cel mai mic discul la fiecare ciudat mișcări oscilante (sau petrochimica-l de la numărul de pepvonachalnogo de discuri depinde) ora stpelki.

Toate mișcările chiar sunt determinate fără echivoc. Care unitate este mai mică - aceasta și schimbarea (altfel contrazice condiția). pentru că tpogat disc 0 nu poate fi pus mai mult la unul mai mic, de asemenea, nu pot.

Observăm două reguli:
  1. La fiecare mișcare ciudată, cel mai mic disc este transferat.
  2. Cel mai mic disc este transferat întotdeauna ciclic: fie A-B-C-A-B-C-. (în număr egal de discuri) sau A-C-B-A-C-B-. (în cazul unui caz ciudat).

Apoi compunem algoritmul:

1. Determinați numărul de discuri, de unde găsim modul în care se va deplasa cel mai mic disc (acest pas se face la început, mai mult decât o dată).

2. Privim numărul de mișcare: dacă este ciudat - mutați cel mai mic disc în direcția definită la punctul 1. dacă chiar - atunci posibila mișcare este singura - ia cel mai mic dintre cele două discuri superioare și transferă-l.

Puteți scrie un pic diferit:

Pentru N de la 1 la 2 k-1 efectuați
1. În reprezentarea binară a lui N, găsiți cel mai bun bit non-zero. Indicați numărul acestei cifre t.

2. Indicăm numărul barei pe care discul t este localizat de i. Deplasați discul t din tija i în tija (i + (- 1) t) mod 3.

De altfel, numărul de accident vascular cerebral poate restaura cu ușurință poziția discurilor pe tija: după i-lea accident vascular cerebral număr disc j este pe numărul de web (-1) nj * ((i div 2 j) - (i div 2 j + 1)) mod 3 .

Articole similare