Ingeniero
#include <iomanip.h>
#include <conio.h>
// procedimiento para pasar n anillos de 'a' a 'c' con ayuda de 'b'
// (1) si (n == 1) entonces mueve un anillode 'a' a 'c'.
// (2) por otra parte (si n > 1) haz
// (2.1) llama al procedimiento para pasar n-1 anillos de 'a' a 'b'
// con ayuda de 'c'
// (2.2) mueve un anillo de 'a' a 'c'.
// (2.3) llamaal procedimiento para pasar n-1 anillos de 'b' a 'c'
// con ayuda de 'a'
const int MAX = 10;
int GetDim()
{
int n = 0;
while(n < 1 || n > MAX)
{
cout << "entre el numero dediscos (0 < n <= 10) : ";
cin >> n;
}
cout << endl << endl;
return n;
} // GET DIM
void Init(int x[3][MAX],int *p,int n)
{
for(int i = 0;i < n;i++)
{
x[0][i] = n-i;// poste "a" recibe los anillos
x[1][i] = x[2][i] = 0; // poste "b" y "c" vacios
}
p[0] = n-1;
p[1] = p[2] = -1;
} // INIT
void Show(int x[][MAX],int n,int counter)
{
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 << '.';
}
if(i == 2)cout << setw(15) << "counter : " << counter;
cout << endl;
}
cout << endl;
getch();
} // SHOW
void Move(int source,int target,int x[][MAX],int *p,int dim,int&counter)
{ // mover anillo de source a target
// ajuste de punteros superiores p
x[target][++p[target]] = x[source][p[source]];
x[source][p[source]--] = 0;
Show(x,dim,counter++);
} // MOVEvoid Process(int source,int auxiliar,int target,int x[][MAX],
int *p,int n,int dim) // proceso recursivo
{
static counter = 1; // contador del numero de movimientos
if(n == 1)Move(source,target,x,p,dim,counter);
else
{
Process(source,target,auxiliar,x,p,n-1,dim);
Move(source,target,x,p,dim,counter);
Process(auxiliar,source,target,x,p,n-1,dim);
}
} // PROCESS
int main()
{
int a...
Regístrate para leer el documento completo.