Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- class Field
- {
- private:
- int m_iNumber;
- int m_iIndicator;
- public:
- Field(int iNumber, int iIndicator);
- Field();
- ~Field();
- void setNumber( int iNumber );
- int getNumber() const;
- void setIndicator( int iIndicator );
- int getIndicator() const;
- };
- Field::Field(int iNumber, int iIndicator) : m_iNumber( iNumber ),
- m_iIndicator( iIndicator )
- {}
- Field::Field() : m_iNumber( 0 ),
- m_iIndicator( 0 )
- {}
- Field::~Field()
- {}
- void Field::setNumber(int iNumber)
- {
- m_iNumber = iNumber;
- }
- int Field::getNumber() const
- {
- return m_iNumber;
- }
- void Field::setIndicator(int iIndicator)
- {
- m_iIndicator = iIndicator;
- }
- int Field::getIndicator() const
- {
- return m_iIndicator;
- }
- Field sudoku[9][9];
- void openFile(string sPath)
- {
- ifstream File(sPath.c_str() , ios_base::in);
- int tmp;
- if (!File)
- cout << "File could not be opened\n";
- else
- {
- for (int i=0; i<9; ++i)
- {
- for (int j=0; j<9; ++j)
- {
- File >> tmp;
- sudoku[i][j].setNumber(tmp);
- if(tmp!=0)
- {
- sudoku[i][j].setIndicator(-1);
- }
- }
- File.ignore(1000, '\n');
- }
- File.close();
- }
- }
- int checkNumber(int iRow, int iColumn,int iNumber)
- {
- int r;
- int c;
- int check=1;
- for(r=0;r<=8;r++)
- {
- if(r!=iRow)
- {
- if(sudoku[r][iColumn].getNumber()==iNumber)
- {
- check = 0;
- }
- }
- }
- for(c=0;c<=8;c++)
- {
- if(c!=iColumn)
- {
- if(sudoku[iRow][c].getNumber()==iNumber)
- {
- check = 0;
- }
- }
- }
- int m = (iRow-(iRow%3));
- int n = (iColumn-(iColumn%3));
- for(r=m;r<(m+3);r++)
- {
- for(c=n;c<(n+3);c++)
- {
- if(r!=iRow||c!=iColumn)
- {
- if(sudoku[r][c].getNumber()==iNumber)
- {
- check = 0;
- }
- }
- }
- }
- return check;
- }
- int solvingStep(int i, int j, int ind)
- {
- for(int k=(sudoku[i][j].getNumber()+1);k<=9;k++)
- {
- cout<<'|'<<k<<'|';
- if(checkNumber(i,j,k))
- {
- sudoku[i][j].setNumber(k);
- cout<<k<<' ';
- cout<<sudoku[i][j].getIndicator();
- cout<<' '<<ind;
- ind=ind+1;
- cout<<' '<<ind<<"\n";
- sudoku[i][j].setIndicator(ind);
- return 0;
- break;
- }
- else
- {
- if(k==9)
- {
- sudoku[i][j].setNumber(0);
- return ind;
- break;
- }
- }
- }
- }
- void sudokuSolver()
- {
- int ind=0;
- int go=0;
- for(int i=0;i<=8;i++)
- {
- for(int j=0;j<=8;j++)
- {
- if(sudoku[i][j].getIndicator()==go)
- {
- go=solvingStep(i,j,ind);
- i=0;
- j=0;
- cout<<"WOHIN:"<<go<<"!\n";
- if(go==0)
- {
- ind++;
- }
- else if(go==ind)
- {
- ind--;
- }
- }
- }
- }
- }
- int main( int argc, char* argv[] )
- {
- string sPath = "C:\\Users\\Matze\\Desktop\\test.txt";
- //cout<<"Bitte geben sie den Pfad des Sudokuproblems an:";
- //cin>>sPath;
- openFile(sPath);
- int x;
- int y;
- for (x=0;x<=8;x++)
- {
- for (y=0;y<=8;y++)
- {
- cout<< sudoku[x][y].getNumber();
- cout<<' ';
- }
- cout<<"\n";
- }
- cout<<"\n\n\n";
- sudokuSolver();
- for (x=0;x<=8;x++)
- {
- for (y=0;y<=8;y++)
- {
- cout<< sudoku[x][y].getIndicator();
- cout<<' ';
- }
- cout<<"\n";
- }
- cout<<"\n\n\n";
- for (x=0;x<=8;x++)
- {
- for (y=0;y<=8;y++)
- {
- cout<< sudoku[x][y].getNumber();
- cout<<' ';
- }
- cout<<"\n";
- }
- cout << "ENDE" << endl;
- }
Add Comment
Please, Sign In to add comment