Wieże Hanoi: Różnice pomiędzy wersjami
[wersja nieprzejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
nazwy słupków |
|||
Linia 1:
[[Plik:Tower of Hanoi 4.gif|right|frame|Rozwiązanie łamigłówki dla czterech krążków]]
'''Wieże [[Hanoi]]''' – problem polegający na odbudowaniu, z zachowaniem kształtu, wieży z krążków o różnych średnicach (popularna dziecięca zabawka), przy czym podczas przekładania wolno się posługiwać buforem, reprezentowanym w tym przypadku przez dodatkowy słupek, jednak przy ogólnym założeniu, że nie można kłaść krążka o większej [[średnica|średnicy]] na mniejszy ani przekładać kilku krążków jednocześnie. Jest to przykład zadania, którego [[złożoność obliczeniowa]] wzrasta niezwykle szybko w miarę zwiększania parametru wejściowego, tj. liczby elementów wieży.
Linia 7 ⟶ 6:
== Algorytm ==
[[Plik:Tower of Hanoi.jpeg|thumb|300px|Od lewej: słupek A z całą wieżą, pusty słupek B pełniący rolę bufora i pusty słupek docelowy C]]
Wieże Hanoi można łatwo rozwiązać za pomocą prostego algorytmu [[Rekursja|rekurencyjnego]] lub iteracyjnego.
*
*
=== Rozwiązanie rekurencyjne ===
Algorytm rekurencyjny składa się z następujących kroków:
# przenieś (rekurencyjnie)
# przenieś jeden krążek ze słupka A na słupek
# przenieś (rekurencyjnie)
Przykładowe implementacje ▼
* w [[Python]]ie:
<source lang="python">
def hanoi(n, A,
"""słupki A, B, C są listami"""
if n > 0:
hanoi(n-1, A,
C.insert(0, A.pop(0))
hanoi(n-1, B,
</source>
* w [[C++]]:
Linia 33 ⟶ 32:
using namespace std;
void hanoi(int n, char
// przekłada n krążków z
if (n > 0) {
hanoi(n-1,
cout <<
hanoi(n-1,
}
}
Linia 47 ⟶ 46:
}
</source>
=== Rozwiązanie iteracyjne ===
|