### http://www.lawebdelprogramador.com ### ### Respuesta a la pregunta 1044 - C/Visual C ### // programa : Hanoi no recursivo // borland c++ for windows - ver 4.5 // 10/4/2004 #include #include #include const int MAX = 10; int a = 0,b = 1,c = 2 ,n = 0, p[3],x[3][MAX]; void GetDim() { while(n < 1 || n > MAX) { cout << "entre el numero de discos (0 < n <= 10) : "; cin >> n; } cout << endl << endl; } // GET DIM void Init() { if(n%2) // para numero de aros pares, rotacion inversa { b = 2; c = 1; } for(int i = 0;i < n;i++) x[0][i] = n-i; p[0] = n-1; p[1] = p[2] = -1; } // INIT void Show() { for(int i = 0;i < 3;i++) { cout << "[" << char('a'+i) << "] : "; for(int j = 0;j < n;j++) { cout << setw(3); if(x[i][j]) cout << x[i][j]; else cout << '.'; } cout << endl; } cout << endl; getch(); } // SHOW void Rotation() { int holder = a; a = b; b = c; c = holder; } // ROTATION void Move(int source,int target) { x[target][++p[target]] = x[source][p[source]]; x[source][p[source]--] = 0; } // MOVE void Process() { Show(); for(;;) { Move(a,b); Show(); if(p[b] == n-1) break; if(p[c] == -1) Move(a,c); else if(p[a] == -1) Move(c,a); else if(x[a][p[a]] < x[c][p[c]]) Move(a,c); else Move(c,a); Show(); Rotation(); } } // PROCESS void main() { cout << "Torres de Hanoi, processo no recursivo : " << endl << endl; GetDim(); Init(); Process(); cout << "end of program - good bye ! ! ! " << endl; getch(); } // MAIN Espero te sirva Ricardo Muņoz Tapia lmunozt0300@ipn.mx