Red de conocimiento informático - Conocimiento sistemático - Torre de Hanoi, ¿cómo se escribe y punto?

Torre de Hanoi, ¿cómo se escribe y punto?

¿No está esto aquí? No tienes mucha previsión, pero todavía estás enojado.

●Código fuente C++ para la implementación no recursiva del algoritmo de la Torre de Hanoi

#Incluye iostream

Usar namespace std

Número máximo de discos para 64.

const int MAX = 64

Se utiliza para representar la información de cada columna.

Estructura st{

int s[MAX]; almacenamiento en disco en la columna

int parte superior de la pila, utilizada para el disco superior.

Nombre del personaje; el nombre de la columna puede ser uno de A, B y c.

Int Top() obtiene el elemento superior de la pila.

{

return s[top];

}

Int Pop() excedió la pila.

{

return s[top –];

}

Void empujado a la pila (int x)

{

s[++ arriba]= x;

}

};

long Pow(int x, int y); Calcular x y

void Creat(st ta[], int n); Establece el valor inicial de la matriz de estructura.

void Hanoi Tower (st ta[], long max la función principal de Hanoi Mobile Tower

int main(void)

{

int n;

CIN n; Introduzca el número de discos.

ST ta[3];La información de los tres pilares se almacena en la matriz de la estructura.

Creat(ta, n); Establece el valor inicial de la matriz de estructura.

long max = Pow(2,n)-1; el número de movimientos debe ser igual a 2 n-1.

Torre de Hanoi (ta, max); la función principal del sistema de Torre Móvil de Hanoi ("pausa");

}

Creación nula(st ta[], int n)

{

ta[0]. nombre = ' A

ta[0]. top = n-1;

Coloque todos los discos en la columna A en orden de mayor a menor.

for(int I = 0; in; i++)

ta[0]. s[I]= n-I;

No hay discos en los pilares B y c al principio.

ta[1]. arriba = ta[2]. arriba = 0;

for(int I = 0; en; i++)

ta[1]. s[i] = ta[2]. s[I]= 0;

Si n es un número par, coloque una B y una C en el sentido de las agujas del reloj.

Si (n%2 == 0)

{

ta[1]. nombre = ' B

ta[2]. name = ' C

}

De lo contrario, si n es un número impar, coloque A C B en el sentido de las agujas del reloj.

{

ta[1]. nombre = ' C

ta[2].

name = ' B

}

}

Potencia larga (entero x, entero y)

{

Suma larga = 1;

for(int I = 0;iy;i++)

suma = x;

Devuelve la suma;

}

Torre de Hanoi no válida (st ta[], long max)

{

int k = 0 número acumulado de movimientos

int I = 0;

int ch

Blanco (kmax)

{

Cambiar disco 1 de Move la columna actual a la siguiente columna en el sentido de las agujas del reloj.

ch=ta[i%3]. pop();

ta[(i+1)%3]. Push (ch);

cout ++k " "

Mover el disco "ch" de "ta[i%3]. nombre

" a " ta[(i+1)%3]. name endl

i++;

Mueva los discos extraíbles de las otras dos columnas a la nueva columna.

IF(kmax)

{

Mueva el disco de la columna no vacía a la columna vacía. Cuando ambas columnas estén vacías, mueva el disco más pequeño /p>

. if (ta[(i+1)%3].Top() == 0

ta[(i-1)%3].top()0 & amp; & amp

ta[(i+1)%3]. Arriba() ta[(i-1)%3]

{

ch = ta[(i-1). )%3]. pop();

ta[(i+1)%3].

cout ++k " " "Disco móvil"

ch " de " ta[(i-1)%3].nombre

" a " ta[(i+1) %3]. Nombre endl

}

Otro

{

ch = ta[(i+1)%3 pop();

ta[(i-]. 1)%3]. Push(ch);

cout ++k "" "Disco móvil"

ch " de " ta[(i+1)%3]. nombre

" a " ta[(i-1)%3].nameendl

}

}

}

}