|
Compartir este tema:
|
El 24 marzo, 2011 · 3 Comentarios
Sudokux es una aplicación en Java, capaz de resolver en menos de un segundo cualquier sudoku que le propongas.
Nombre del Programa: Sudokux.
Versión del Programa: 1.0.
Autor(es): Pablo Martínez Insua (pablomi).
Sistema Operativo: Multiplataforma.
Lenguaje en que fue programado: Java 1.6.x.
Licencia bajo la que fue liberado: Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0. Ver registro en Safe Creative.
Fecha de lanzamiento: 06 – 09 – 2010.
Idioma(s): Español.
Captura:
Código:
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; // Sudokux 1.0 - Pablo Martínez Insua // // Programa registrado. // Licencia: -http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es_PE public class Sudokux { private static int[][] casilla; JFrame ventana = new JFrame("Sudokux 1.0"); JMenuBar menus = new JMenuBar(); JMenu menuArchivo = new JMenu("Archivo"); JMenu menuHelp = new JMenu("Ayuda"); JMenuItem archivoSalir = new JMenuItem("Salir"); JMenuItem helpAcercaDe = new JMenuItem("Acerca de"); Font fontRespuesta = new Font("Verdana", Font.BOLD, 20); JButton resolver = new JButton("Resolver"); JButton borrar = new JButton("Borrar"); JTextField numeros[][] = new JTextField[10][10]; String solucion; public static void main(String[] args){ casilla = new int[10][10]; for(int col=0; col<9; col++) for(int fil=0; fil<9 ; fil++) casilla[fil][col] = 0; Sudokux mostrarVentana = new Sudokux(); } public Sudokux(){ configurar(); acciones(); } void configurar(){ menuArchivo.add(archivoSalir); menuHelp.add(helpAcercaDe); menus.add(menuArchivo); menus.add(menuHelp); for(int i=1; i<10; i++){ for(int j=1; j<10; j++){ numeros[i][j] = new JTextField(1); ventana.add(numeros[i][j]); numeros[i][j].setFont(fontRespuesta); } } ventana.add(menus); ventana.setJMenuBar(menus); ventana.add(resolver); ventana.add(borrar); ventana.setVisible(true); ventana.setSize(300, 420); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.setLayout(new FlowLayout(FlowLayout.CENTER)); } void acciones(){ archivoSalir.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); helpAcercaDe.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JOptionPane.showMessageDialog(null, "Programa: Sudokux\nAutor: Pablo Martínez Insua\nVersión: 1.0", "Acerca de", JOptionPane.INFORMATION_MESSAGE); } }); resolver.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ recoger_datos(); resuelve(1,1); for (int col=1; col<10; col++){ for (int fil=1; fil<10 ; fil++){ numeros[fil][col].setText(""+casilla[fil][col]); } } } }); borrar.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ for (int col=1; col<10; col++){ for (int fil=1; fil<10 ; fil++){ numeros[fil][col].setText(""); casilla[fil][col] = 0; } } } }); } void recoger_datos(){ int tiene = 1; for (int col=1; col<10; col++){ for (int fil=1; fil<10 ; fil++){ if(!numeros[fil][col].getText().equals("")) casilla[fil][col] = Integer.parseInt(numeros[fil][col].getText()); tiene = 0; } } if(tiene==1){ JOptionPane.showMessageDialog(null, "Introduce el sudoku a resolver.", "Error", JOptionPane.WARNING_MESSAGE); } } private static boolean resuelve(int fil, int col){ boolean resuelto = false, casillaSegura = false; int num = 1; if (casilla[fil][col]!=0) { casillaSegura = true; num=9; } while(!resuelto && num<10) { if(!casillaSegura) casilla[fil][col] = num; if(es_valida(fil,col)) { if(fil==9 && col==9) resuelto = true; else if (fil<9) resuelto = resuelve(fil+1, col); else if(fil==9) resuelto = resuelve(1, col+1); } num++; } if (!resuelto && !casillaSegura) casilla[fil][col] = 0; return resuelto; } private static boolean es_valida(int fil, int col){ for(int i=1; i<10; i++) if(fil!=i && casilla[fil][col] == casilla[i][col]) return false; for (int i=1; i<10; i++) if (col!=i && casilla[fil][col] == casilla[fil][i] ) return false; int cuadroColumna = (int)(Math.floor((col-1)/3)*3)+1, cuadroFila = (int)(Math.floor((fil-1)/3)*3)+1; for(int i=cuadroColumna; i<cuadroColumna +3; i++) for (int j=cuadroFila; j<cuadroFila+3; j++) if(col!=i && fil!=j && casilla[fil][col] == casilla[j][i]) return false; return true; } }


Hola me parece magnifico este programa pero me interesaría mirar el código fuente completo, porque el que esta colgado en la red no esta completo no se pueden ver las ultimas lineas de código.
Agradecería que alguien me lo enviara a mi correo: woky88@hotmail.com
Gracias.
Listo, esta corregido, era un error nuestro. Saludos.
Gracias.