Home Programming C++ Program penyelesai Sudoku mengggunakan C++ (Source code dan executable)

Lama rasanya tidak menulis dalam blog ini, kali saya nak kongsi bagaimana program penyelesai Sudoku. Untuk memudahkan program yang dihasilkan ini digunakan oleh mereka yang tidak mempunyai pengetahuan teknikal saya bina dalam GUI (Graphical User Interface) iaitu ada button dan sebagainya. Saya juga menyediakan source code ditulis dalam C++  untuk mereka yang ingin mengubahsuai atau memahami algoritma disebalik program penyelesai sudoku ni.

sudoku

Antara fungsi yang saya letak pada program ini adalah seperti anda boleh “Save” sudoku dan juga “Open” kembali, Sekiranya anda mempunyai cadangan untuk menambahbaikan boleh ajukan kepada saya ataupun sekiranya anda mengubah code sudoku ini dan ingin berkongsi dengan orang lain boleh beritahu kepada saya juga.

Boleh muat turun program yang telah siap disini. Size file agak besar sedikit kerana  saya masukkan dependency file dalam tu membolehkan anda run program di mana-mana sahaja asalkan sistem operasi adalah Windows XP dan keatas tanpa perlu lakukan proses pemasangan.

 Muat turun Sudoku Solver

Sekiranya anda berminat untuk memuat turun source code boleh dapatkan pada link dibawah, ia dicompile menggunakan Microsoft Visual Studio 2010 dan  QT.

Muat turun Source Code

Code utama yang menyelesaikan sudoku ini ada pada file MainWindow.cpp.

bool MainWindow::solve_sudoku_1(int x_cord, int y_cord){

    if(box[x_cord][y_cord] != 0){

        if(isval_valid(x_cord,y_cord,box[x_cord][y_cord])){

            if(x_cord == 8 && y_cord==8){
                return true;
            }
            int next_x = x_cord+1;
            int next_y = y_cord;

            if(next_x >= 9){
                next_x = 0;
                next_y++;
            }

            return solve_sudoku_1(next_x,next_y);
        }
        else{
            return false;
        }
    }

    for(int val=1; val<10; val++){
        box[x_cord][y_cord] = val;
        if(isval_valid(x_cord,y_cord,val)){
            if(x_cord == 8 && y_cord==8){
                return true;
            }

            int next_x = x_cord+1;
            int next_y = y_cord;

            if(next_x >= 9){
                next_x = 0;
                next_y++;
            }

            if(solve_sudoku_1(next_x,next_y)){
                return true;
            }
        }
    }

    box[x_cord][y_cord] = 0;
    return false;
}

Kaedah penyelesaian sudoku ini adalah berdasarkan “Brute Force” iaitu cuba satu persatu sehingga semua nombor didalam kotak adalah sah mengikut format sudoku. Anda boleh membaca di Wikipedia sekiranya tidak tahu bagaimana permainan Sudoku ini.

Untuk yang tidak tahu apa itu “Brute Force” saya akan cuba terangkan secara analogi

lock

Pernah guna mangga seperti kat gambar atas? Contohnya sekiranya lupa kombinasi nombor untuk buka mangga tu apa yang akan anda buat, caranya teka satu per satu sehingga terbuka.  Itulah kaedah brute force iaitu mencuba semua kombinasi sehingga berjaya.

Leave a Reply

Anti-spam: complete the taskWordPress CAPTCHA