1votos

Torres de Hannoi en C

por josejuan hace 6 años

Enumerando bits. Sin desenrollar el bucle, enumerar los movimientos de 30 discos unos 3,5 segundos (por tanto enumerar 32 serían unos 14 segundos en mi máquina).

Dado un numero "n" imprimir por pantalla los pasos para resolver las torres de hannoi con n-torres

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// FUENTE: http://hanoitower.mkolar.org/shortestTHalgo.html 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char **argv) { 
  int n, x, t, f; 
  n = atoi(argv[1]); 
   
  int S = 123456; // verificar sumas 
   
  for(x = 1; x < (1 << n); x++) { 
    f = (x & x - 1) % 3; 
    t = ((x | x - 1) + 1) % 3; 
    //printf("%i, %i\n", t, f); 
    S += t - f; // forzar que no se optimize el bucle interno 
   
  printf("%i\n", S); // debe quedar invariante 
  return 0; 
 
/* 
[josejuan@centella solveet]$ gcc -O3 hanoi.c -o hanoi 
[josejuan@centella solveet]$ time -f "%E, %M" ./hanoi 30 
123486 
0:03.45, 472 
[josejuan@centella solveet]$  
*/ 
4 comentarios
0votos

Escrito por jneira hace 6 años

centella? juasss
0votos

Escrito por josejuan hace 6 años

XD XD

Es el equipo más rápido que tengo... con diferencia (aunque tampoco es que sea graaaan cosa, un AMD Phenom(tm) II X6 1045T Processor, son 6 cores reales a 2,7 GHz y lleva 8G RAM).

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.