Guest User

Untitled

a guest
Jun 22nd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class Field
  8. {
  9. private:
  10.  
  11. int m_iNumber;
  12. int m_iIndicator;
  13.  
  14. public:
  15. Field(int iNumber, int iIndicator);
  16. Field();
  17. ~Field();
  18.  
  19. void setNumber( int iNumber );
  20. int getNumber() const;
  21. void setIndicator( int iIndicator );
  22. int getIndicator() const;
  23. };
  24.  
  25. Field::Field(int iNumber, int iIndicator) : m_iNumber( iNumber ),
  26. m_iIndicator( iIndicator )
  27. {}
  28.  
  29. Field::Field() : m_iNumber( 0 ),
  30. m_iIndicator( 0 )
  31.  
  32. {}
  33.  
  34.  
  35. Field::~Field()
  36. {}
  37.  
  38. void Field::setNumber(int iNumber)
  39. {
  40. m_iNumber = iNumber;
  41. }
  42.  
  43. int Field::getNumber() const
  44. {
  45. return m_iNumber;
  46. }
  47.  
  48. void Field::setIndicator(int iIndicator)
  49. {
  50. m_iIndicator = iIndicator;
  51. }
  52.  
  53. int Field::getIndicator() const
  54. {
  55. return m_iIndicator;
  56. }
  57.  
  58. Field sudoku[9][9];
  59.  
  60. void openFile(string sPath)
  61. {
  62.  
  63. ifstream File(sPath.c_str() , ios_base::in);
  64.  
  65. int tmp;
  66.  
  67. if (!File)
  68. cout << "File could not be opened\n";
  69. else
  70. {
  71. for (int i=0; i<9; ++i)
  72. {
  73. for (int j=0; j<9; ++j)
  74. {
  75. File >> tmp;
  76. sudoku[i][j].setNumber(tmp);
  77. if(tmp!=0)
  78. {
  79. sudoku[i][j].setIndicator(-1);
  80. }
  81.  
  82. }
  83. File.ignore(1000, '\n');
  84. }
  85. File.close();
  86. }
  87. }
  88.  
  89.  
  90. int checkNumber(int iRow, int iColumn,int iNumber)
  91. {
  92. int r;
  93. int c;
  94. int check=1;
  95.  
  96. for(r=0;r<=8;r++)
  97. {
  98. if(r!=iRow)
  99. {
  100. if(sudoku[r][iColumn].getNumber()==iNumber)
  101. {
  102. check = 0;
  103. }
  104. }
  105. }
  106. for(c=0;c<=8;c++)
  107. {
  108. if(c!=iColumn)
  109. {
  110. if(sudoku[iRow][c].getNumber()==iNumber)
  111. {
  112. check = 0;
  113. }
  114. }
  115. }
  116. int m = (iRow-(iRow%3));
  117. int n = (iColumn-(iColumn%3));
  118.  
  119.  
  120. for(r=m;r<(m+3);r++)
  121. {
  122. for(c=n;c<(n+3);c++)
  123. {
  124. if(r!=iRow||c!=iColumn)
  125. {
  126. if(sudoku[r][c].getNumber()==iNumber)
  127. {
  128.  
  129. check = 0;
  130. }
  131.  
  132. }
  133. }
  134.  
  135. }
  136. return check;
  137. }
  138.  
  139. int solvingStep(int i, int j, int ind)
  140. {
  141. for(int k=(sudoku[i][j].getNumber()+1);k<=9;k++)
  142. {
  143. cout<<'|'<<k<<'|';
  144. if(checkNumber(i,j,k))
  145. {
  146.  
  147. sudoku[i][j].setNumber(k);
  148. cout<<k<<' ';
  149. cout<<sudoku[i][j].getIndicator();
  150. cout<<' '<<ind;
  151. ind=ind+1;
  152. cout<<' '<<ind<<"\n";
  153. sudoku[i][j].setIndicator(ind);
  154. return 0;
  155. break;
  156. }
  157. else
  158. {
  159. if(k==9)
  160. {
  161. sudoku[i][j].setNumber(0);
  162. return ind;
  163. break;
  164. }
  165. }
  166. }
  167. }
  168.  
  169.  
  170. void sudokuSolver()
  171. {
  172. int ind=0;
  173. int go=0;
  174.  
  175.  
  176.  
  177. for(int i=0;i<=8;i++)
  178. {
  179. for(int j=0;j<=8;j++)
  180. {
  181. if(sudoku[i][j].getIndicator()==go)
  182. {
  183. go=solvingStep(i,j,ind);
  184. i=0;
  185. j=0;
  186. cout<<"WOHIN:"<<go<<"!\n";
  187. if(go==0)
  188. {
  189. ind++;
  190. }
  191. else if(go==ind)
  192. {
  193. ind--;
  194. }
  195. }
  196. }
  197. }
  198. }
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213. int main( int argc, char* argv[] )
  214. {
  215. string sPath = "C:\\Users\\Matze\\Desktop\\test.txt";
  216. //cout<<"Bitte geben sie den Pfad des Sudokuproblems an:";
  217. //cin>>sPath;
  218. openFile(sPath);
  219.  
  220.  
  221. int x;
  222. int y;
  223.  
  224. for (x=0;x<=8;x++)
  225. {
  226. for (y=0;y<=8;y++)
  227. {
  228. cout<< sudoku[x][y].getNumber();
  229. cout<<' ';
  230. }
  231. cout<<"\n";
  232. }
  233.  
  234. cout<<"\n\n\n";
  235.  
  236. sudokuSolver();
  237.  
  238. for (x=0;x<=8;x++)
  239. {
  240. for (y=0;y<=8;y++)
  241. {
  242. cout<< sudoku[x][y].getIndicator();
  243. cout<<' ';
  244. }
  245. cout<<"\n";
  246. }
  247.  
  248.  
  249.  
  250. cout<<"\n\n\n";
  251.  
  252. for (x=0;x<=8;x++)
  253. {
  254. for (y=0;y<=8;y++)
  255. {
  256. cout<< sudoku[x][y].getNumber();
  257. cout<<' ';
  258. }
  259. cout<<"\n";
  260. }
  261.  
  262. cout << "ENDE" << endl;
  263.  
  264. }
Add Comment
Please, Sign In to add comment