// 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;
}