Dün bir arkadaşımın C#'da yaptığını gördüm, hemen kolları sıvadım ve ben de java'da yaptım. O C#'da yaptığı için benden üstün olduğu taraflar vardı onu da biraz uğraşla hallettim.
İlk olarak içerisini dolu kabul ettiğim 3 boyutlu bir dizi oluşturdum. Üç boyutlu tasarlamamın sebebi sudoku'da 9 kutucuk ve her kutucukta 3 satır, 3 sütun olması. Çözüm kodu aşağıda:
HashMap<Integer, Integer> ihtimaller = new HashMap<Integer, Integer>();
int dizi[][][] = new int[9][3][3];
// Kutucuk seç for (int i = 0; i < 9; i++) { boolean B = false;
// Kutucuk içinde Satır seç for (int j = 0; j < 3; j++) {
// Kutucuk içinde Sütun seç for (int k = 0; k < 3; k++) { if (dizi[i][j][k] == 0) {
for (int z = 1; z < 10; z++) { ihtimaller.put(z, z); }
// Seçili kutu içindeki sayıları ihtimallerden çıkart for (int b = 0; b < 3; b++) { for (int c = 0; c < 3; c++) { ihtimaller.put(dizi[i][b][c], 0); } }
// Seçili satırdaki sayıları ihtimallerden çıkart for (int a = (i / 3) * 3; a < (i / 3) * 3 + 3; a++) { for (int c = 0; c < 3; c++) { ihtimaller.put(dizi[a][j][c], 0); } }
// Seçili sütundaki sayıları ihtimallerden çıkart for (int a = i % 3; a < (i % 3) + 7; a += 3) { for (int b = 0; b < 3; b++) { ihtimaller.put(dizi[a][b][k], 0); } }
// Kaç ihtimal kaldığına bak int xCnt = 0; int xTemp = 0; for (int x = 1; x < 10; x++) { if (ihtimaller.containsValue(x)) { xCnt++; xTemp = x; } }
// Bir ihtimal kaldıysa o sayıyı yerleştir ve döngüyü terket. if (xCnt == 1) { dizi[i][j][k] = xTemp; B = true; break; } } } //Kutu sayacını sıfırlayarak mevcut döngüyü teket. if (B) { i = -1; break; } } }
Benim için asıl zor olan bu kodun neyi çözeceği oldu Çünkü her seferinde kodlarla sudokunun içini dolduramazdım. O yüzden NetBeans'te jFrame'e başvurdum. Aşağıdaki kod kalabalığı oraya ait. Kendi idenizde "SudokuCoz" adında yeni class açarak "package" hariç bütün satırlarını silerek ekteki text içindeki kodu yapıştırıp kullanabilirsiniz.
İlk olarak içerisini dolu kabul ettiğim 3 boyutlu bir dizi oluşturdum. Üç boyutlu tasarlamamın sebebi sudoku'da 9 kutucuk ve her kutucukta 3 satır, 3 sütun olması. Çözüm kodu aşağıda:
Benim için asıl zor olan bu kodun neyi çözeceği oldu
sonuç:
< Resime gitmek için tıklayın >
edit: Program çalışmıyormuş, kimse de uyarmamış. Düzelttim, artık kendi ide'nize kodu yapıştırarak çalıştırabilirsiniz
Edit3: Sudoku oluşturma kodlarını bu mesaja ekleyemediğim için son mesajda verdim.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi Guest -- 18 Temmuz 2012; 15:19:55 >