2009-08-30 18 views
22

¿Cuál sería un algoritmo relativamente fácil de codificar en Java para resolver un cubo de Rubik? La eficiencia también es importante, pero una consideración secundaria.Algoritmo más fácil de codificar para el cubo de Rubik?

+0

La pregunta está mal redactada y la pregunta que se vota como "correcta" no es, de hecho, la respuesta correcta. Esto muestra por qué el "algoritmo más fácil de codificar" puede no ser lo que usted quiere, el programa nunca terminará. Y muestra por qué necesita preocuparse por la eficiencia. – vy32

+0

Me robaron * llorar *: p – Rushyo

+0

Podrías volver a formular la frase, '¿Cuál es el algoritmo más fácil de codificar que da resultados en nuestra vida' :-) –

Respuesta

12

El más simple no trivial algoritmo que he encontrado es ésta:

http://www.chessandpoker.com/rubiks-cube-solution.html

No parece demasiado difícil de codificar. El enlace mencionado en Yannick M.'s answer también se ve bien, pero la solución del paso 'the cross' parece que podría ser un poco más complejo para mí.

Hay una serie de implementaciones de soluciones de código abierto que le gustaría echar un vistazo. Aquí hay un Python implementation. Este Java applet también incluye un solucionador, y el código fuente está disponible. También hay un Javascript solver, también con código fuente descargable.

Anthony Gatlin's answer es un excelente punto acerca de la idoneidad de Prolog para esta tarea. Aquí hay un artículo detallado sobre cómo escribir su propio Prolog solver. La heurística que utiliza es particularmente interesante.

+2

el enlace al solucionador JS parece estar roto. –

49

Realice operaciones aleatorias hasta que obtenga la solución correcta. El algoritmo más fácil y el menos eficiente.

+38

Hahaha con 4.33 * 10^19 permutaciones que es muy cierto el menos eficiente :-) –

+5

+1 para hacer las matemáticas;) – Rushyo

+1

@ Rushyo lol bien jugado señor @Yannick ¿Puede explicar cómo calculó las permutaciones, por favor? – kokokok

3

Entiendo que su pregunta está relacionada con Java, pero en una nota práctica, los lenguajes como Prolog son problemas mucho más adecuados, como resolver un cubo de Rubik. Sin embargo, supongo que esto es probablemente para una clase y es posible que no tenga libertad de acción para elegir la herramienta.

+0

correcto, desafortunadamente para la clase tengo que hacerlo en Java – kokokok

+0

+1 por recordarme Prolog. ;) –

+1

Mmmmm, un uso para prolog. – Rushyo

0

Puede hacerlo haciendo BFS (Breadth-First-Search). Creo que la implementación no es tan difícil (es uno de los algoritmos más simples en la categoría del gráfico). Al hacerlo con la estructura de datos llamada queue, en lo que realmente trabajará es construir un árbol BFS y buscar la llamada ruta más corta desde la condición dada hasta la condición de deseo. El inconveniente de este algoritmo es que no es lo suficientemente eficiente (sin ninguna modificación, incluso para resolver un cúbico de 2x2x2, el tiempo necesario es ~ 5 minutos). Pero siempre puedes encontrar algunos trucos para aumentar la velocidad.

Para ser honesto, es una de las tareas del curso llamado "Introduction of Algorithm" del MIT. Aquí está el enlace de la tarea: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/MIT6_006F11_ps6.pdf. Tienen algunas bibliotecas para ayudarlo a visualizarlo y para ayudarlo a evitar esfuerzos innecesarios.

Cuestiones relacionadas