26 August 2009

Sudoku Algorithm

// Suduku Algorithm
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int T[9][9];
//1
class find {
    public: 
void FillAll();
void Fslot(int,int);
};

class check {
 public:
bool checkAll();
bool row(int);
bool col(int);
};

void find::FillAll()
{ for (int i=0; i<9; i++)
  for (int j=0; j<9; j++)
  find::Fslot(i,j);
 
void find::Fslot(int m, int n)
{ int x = 0;
  while(true){
 x++; 
 if ((x!=T[m][0])&&(x!=T[m][1])&&(x!=T[m][2])&&(x!=T[m][3])&&(x!=T[m][4])&&(x!=T[m][5])&&(x!=T[m][6])&&(x!=T[m][7])&&(x!=T[m][8])&&(x!=T[0][n])&&(x!=T[1][n])&&(x!=T[2][n])&&(x!=T[3][n])&&(x!=T[4][n])&&(x!=T[5][n])&&(x!=T[6][n])&&(x!=T[7][n])&&(x!=T[8][n]))
       break; }
     T[m][n] = x; 
}  
 
bool check::checkAll()
{ for (int z=0; z<9; z++)
  { if (!check::row(z))
  return false;
 else if (!check::col(z))
  return false;
  }
return true;}

bool check::row(int m)
{ int sum = 0;
  for ( int i = 0; i < 9; i++ )
  sum = sum + T[m][i];
  if (sum == 45)
  return true;
     else 
        return false;
     } 
     
bool check::col(int n)
{ int sum = 0;
  for ( int i = 0; i < 9; i++ )
  sum = sum + T[i][n];
  if (sum == 45)
  return true;
     else 
        return false;
  }
 
//2
int main ()
{ int v;
  ifstream source;
  source.open("file.txt");
for (int i=0; i<9; i++)
for (int j=0; j<9; j++)
{source >> v;
T[i][j] = v; }
 
//FillAll();
find::FillAll();
if(check::checkAll())
   cout << "YES,DONE\n";
   
for (int x=0; x<9; x++)
{for (int y=0; y<9; y++)
cout << setw(3) << T[x][y];
  cout << endl;}
system ("pause");
return 0;
}