Turnurile din Hanoi
Se dau 3 tije simbolizate prin a,b,c. Pe tija a se gasesc n discuri de diametre diferite, asezate in ordine descrescatoare a diametrelor. Se cere sa se mute de pe tija a pe b, utilizand ca tija intermediara tija c, toate cele n discuri, respectand urmatoarele reguli:
-la fiecare pas se muta un singur disc ;
-nu este permis sa se aseze un disc cu diametrul mai mare peste un disc cu diametrul mai mic.
Rezolvare:
Daca n=1 se face mutarea ab, adica se muta discul de pe tija a pe tija b.
Daca n=2 se fac mutarile ac,ab,cb.
Daca n>2 . Notam cu H(n,a,b,c) sirul mutarilor celor n discuri de pe tija a pe tija b , utilizand ca tija intermediara, tija c.
Conform strategiei Divide et impera incercam sa descompunem problema in alte doua subprobleme de acelasi tip, urmand apoi combinarea solutiilor. Deci:mutarea celor n discuri de pe tija a pe tija b,utilizand ca tija intermediara tija c, este echivalenta cu:
muatrea a n-1 discuri de pe tija a pe tija c , utilizand ca tija intermediara tija b;
mutarea discului ramas de pe tija a pe tija b;
mutarea a n-1 discuri de pe tija c pe tija b , utilizand ca tija intermediara tija a.
#include<iostream.h>
char a,b,c;
int n;
void h(int n,char a,char b, char c)
{
if(n==1) cout<<a<<b<<” “;
else
{
h(n-1,a,c,b);
cout<<a<<b<<” “;
h(n-1,c,b,a);
}
}
void main()
{
cout<<“n=”;cin>>n;
h(n,’a’,’b’,’c’);
}
{joscommentenable}