¿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?
Respuesta
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.
el enlace al solucionador JS parece estar roto. –
Realice operaciones aleatorias hasta que obtenga la solución correcta. El algoritmo más fácil y el menos eficiente.
posible que desee comprobar hacia fuera: http://peter.stillhq.com/jasmine/rubikscubesolution.html
tiene una representación gráfica de un algoritmo para resolver un cubo de Rubik 3x3x3
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.
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.
- 1. ¿Cómo representarías un cubo de Rubik en el código?
- 2. ¿Implementando el algoritmo del cubo de marcha?
- 3. ¿Qué algoritmo usarías para codificar un loro?
- 4. Desafío de programación: ¿La forma más fácil de codificar esta cuadrícula?
- 5. Reconocimiento marcador en Android (reconocimiento de cubos de Rubik)
- 6. Algoritmo para el punto más cercano
- 7. El DHT más fácil de implementar
- 8. algoritmo de cierre transitivo más conocido para el gráfico
- 9. encuentra el algoritmo de submatriz más grande
- 10. desarrollo bookmarklet más fácil
- 11. Algoritmo de Eppstein y algoritmo de Yen para k caminos más cortos
- 12. Erlang - Intercalar el camino más fácil
- 13. Javascript: ¿Forma más fácil de formatear números?
- 14. algoritmo de contraste más rápido para un mapa de bits
- 15. Algoritmo para determinar el tipo de cambio
- 16. ¿Cuál es el mejor algoritmo para la palabra más cercana
- 17. Algoritmo de triangulación de Delaunay más rápido disponible para GPU
- 18. ¿Cuál es el algoritmo más rápido para realizar exponenciación?
- 19. Explicar el algoritmo para resolver el problema de la 'subsecuencia creciente más larga'
- 20. Java: impresión bonita más fácil?
- 21. ¿Cuál es el CMS más fácil de integrar con CakePHP?
- 22. Algoritmo de selección de características más simple
- 23. Más cercano par de algoritmo de puntos
- 24. El mínimo más rápido algoritmo de árbol de expansión
- 25. Algoritmo de clasificación más rápido para una situación específica
- 26. Algoritmo más rápido disponible para la transformación de distancia
- 27. Algoritmo más rápido para la prueba de primalidad
- 28. Cómo codificar para multitouch
- 29. Ambigüedades de cubo de marcha versus Tetraedro de marcha
- 30. ¿Qué algoritmo de deconvolución es el más adecuado para eliminar el desenfoque de movimiento del texto?
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
Me robaron * llorar *: p – Rushyo
Podrías volver a formular la frase, '¿Cuál es el algoritmo más fácil de codificar que da resultados en nuestra vida' :-) –