Site icon IT Tutorial

SUDOKU OYUNUNUN C++ TA GERÇEKLENMESİ

SUDOKU OYUNU BİLİNDİĞİ GİBİ ZEVKLİ BİR BULMACA OYUNUDUR.BU BULMACADA KURAL YATAY VE DİKEY BİR ŞEKİLDE AYRICA HER 3*3 MATRİSLERİN İÇERİSİNDE Kİ TÜM RAKAMLAR DA 1-9 ARASINDA OLMALIDIR BUNU RANDOM OLARAK TA YAPILABİLİR.

#include<iostream>
using namespace std;

int p[9][9],q[9][2],r[9][2];

void eliminate(int a,int b)
{
   if(a>0) 
    {
       for(int x=0;x<a;x++)    
          {
             for(int i=0;i<9;i++) 
               if(q[i][0]==p[x][b])
               {
                     q[i][1]=1;
                     break;             
               }
          } 
    }
    
        if(b>0) 
       {
         for(int x=0;x<b;x++)    
          {
             for(int i=0;i<9;i++) 
               if(q[i][0]==p[a][x])
               {
                     q[i][1]=1;
                     break;             
               }
          } 

    }
    
    if(a%3==1)
     a-=1;
     else if(a%3==2)
     a-=2;
     if(b%3==1)
     b-=1;
     else if(b%3==2)
     b-=2;
   
    for(int x=a;x<=a+2;x++)
    {
       for(int y=b;y<=b+2;y++)    
            if(p[x][y]!=0)
              {
                 for(int i=0;i<9;i++)        
                    if(q[i][0]==p[x][y])
                       {
                           q[i][1]=1;            
                            break;           
                       }                      
              }           
    }
}

void choose(int a,int b)
{
        int l=0;
   if(a>0&&b<6)
   { 
   if(b%3==0&&b+3<=8)
   b+=3;
   else if(b%3==1&&b+3<=8)
   b+=2;
   else if(b%3==2&&b+3<=8)
   b+=1;

   a-=1;
  
   for(int x=b;x<=b+2;x++)
   {
       r[l][0]=p[a][x];
       l++;           
   } 
   

    int count=0;
    
   for(int i=0;i<9;i++) 
     {
     if(q[i][1]==0)
        {
           for(int p=0;p<9;p++)
           if(r[p][0]!=0&&r[p][0]==q[i][0])
           count++;
           if(count==0)
           {   
           r[l][0]=q[i][0]; 
           l++;     
           break;       
           } 
        count=0;
} }

}

void appointment()
{
      for(int i=0;i<9;i++) 
      {
      q[i][0]=i+1; 
      q[i][1]=0;
      }
     
     for(int i=0;i<9;i++) 
      {
      r[i][0]=0; 
      r[i][1]=0;
      }
     
}

bool control(int a,int b,int c)
{
     int count=0;
    
     for(int x=0;x<b;x++)
     if(c==p[a][x])
     count++;
    
     for(int x=0;x<a;x++)
     if(c==p[x][b])
     count++;
    
     if(a%3==1)
     a-=1;
     else if(a%3==2)
     a-=2;
     if(b%3==1)
     b-=1;
     else if(b%3==2)
     b-=2;
   
    for(int x=a;x<=a+2;x++)
    {
       for(int y=b;y<=b+2;y++)    
          if(c==p[x][y])
           count++;                        
                         
    }
    
     if(count==0)
     return true;
}

void start()
{
  
     int y;
    for(int i=0;i<9;i++)     
     {
       for(int j=0;j<9;j++)    
         {
         eliminate(i,j);
         choose(i,j);
        
         for(int h=0;h<9;h++)
         if(r[h][0]!=0)
         {
            y=r[h][0];
            if(control(i,j,y)==true)
            {          
           p[i][j]=y;
           r[h][1]=1;
           break;           
         }
         }
            appointment();
     }
    
     }
     
}

void print()
{
   cout<<endl<<endl; 
   for(int i=0;i<9;i++) 
     {
      for(int j=0;j<9;j++)   
        cout<<”   “<<p[i][j];  
          cout<<endl<<endl;   
     }
}

main()
{
    appointment();   //  q ya değer atadık
    start(); 
    print(); 
   
system (“pause”);     
}

MEHMET SALİH DEVECİ

YAZILIM MÜHENDİSİ

Exit mobile version