Arama butonu
Bu konudaki kullanıcılar: 1 misafir
14
Cevap
10547
Tıklama
0
Öne Çıkarma
Sudoku çözen ve sudoku oluşturan uygulama yaptım :)
G
13 yıl
Yarbay
Konu Sahibi

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.

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

edit2: Artık bütün sudokuları çözebiliyor. Çözemediği sudoku olursa lütfen burada paylaşın

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 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.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi Guest -- 18 Temmuz 2012; 15:19:55 >