IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   C ve C++ (https://www.ircforumlari.net/c-ve-c/)
-   -   C++ (Sudoku) (https://www.ircforumlari.net/c-ve-c/367939-c-sudoku.html)

Ocean 29 Kasım 2010 12:40

C++ (Sudoku)
 
Sudoku çözen program. Sizin tek yapmanız gereken 9x9 luk sudoku matrisini sudoku.in dosyasına yazmak. Bulunması gereken sayıların yerine 0 yazmanız gerekiyor.

Kod:

/*
    IRCForumlari.Net
*/
#include<iostream>
#include<fstream>
#include<cstdlib>
#define FOR(i,j,k) for(i=j;i<k;i++)
using namespace std;
int A[10][10];
int satir[10][10],sutun[10][10],kare[10][10];
int sifir[82][2];
int sifir_sayisi;
void veri_oku()
{
            int i,j,gecici;
            ifstream r("sudoku.in");
            FOR(i,0,9)
                FOR(j,0,9)
                {
                    r>>A[i][j];
                    if(!A[i][j])
                    {
                        sifir[sifir_sayisi][0]=i;
                        sifir[sifir_sayisi++][1]=j;
                    }
                    else
                    {
                            gecici=A[i][j];
                            satir[i][gecici]=1;
                            sutun[j][gecici]=1;
                            kare[i/3*3+(j+3)/3][gecici]=1;
                    }

                }
            r.close();
}
void yaz()
{
        int i,j;
        FOR(i,0,9)
        {
            FOR(j,0,9)
                cout<<A[i][j]<<' ';
            cout<<endl;
        }
        exit(0);
}
void ekle(int i,int j,int a)
{
        A[i][j]=a;
        satir[i][a]=1;
        sutun[j][a]=1;
        kare[i/3*3+(j+3)/3][a]=1;
}
void cikar(int i,int j,int a)
{
        A[i][j]=0;
        satir[i][a]=0;
        sutun[j][a]=0;
        kare[i/3*3+(j+3)/3][a]=0;
}
void yap(int yer)
{
        if(yer==sifir_sayisi) yaz();
        int i=sifir[yer][0],j=sifir[yer][1],a;
        FOR(a,1,10)
            if(!satir[i][a] && !sutun[j][a] && !kare[i/3*3+(j+3)/3][a])
            {
                    ekle(i,j,a);
                    yap(yer+1);
                    cikar(i,j,a);
            }
}
main()
{
        veri_oku();
        yap(0);
}

sudoku.in dosyası buna benzer olmalı.

Kod:

4 0 7 0 0 2 9 0 0
8 0 0 0 3 0 0 2 0
0 5 0 8 9 0 3 0 4
1 8 0 7 0 5 6 0 2
0 0 0 1 0 0 0 0 0
7 4 0 2 0 0 8 0 1
0 1 0 5 7 0 0 0 0
0 2 8 0 0 4 7 0 5
5 0 0 9 0 0 1 4 0



Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 20:34.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk