2015-11-28 4 views
-2
 #include<iostream> 
     #include<fstream> 
     #include<iomanip> 
     #include<string> 
     using namespace std; 
     const int MAX = 9; 

     typedef char BOARD[MAX][MAX]; 

     void dis_board(BOARD); 
     void new_board(BOARD, ifstream& in); 
     void add(); 
     void remove(BOARD); 
     bool chk_row(BOARD arr, int row, int col); 
     bool chk_col(BOARD arr, int row, int col); 
     bool chk_sqr(BOARD arr, int row, int col); 

     int main() 
     { 

    BOARD board; 
int row=0, col=0, num_ele = 0, num; 
char ch1; 
ifstream infile; 
infile.open("mp6in.txt"); 

infile.get(ch1); 
while (infile) 
{ 
    if (ch1 == 'N') 
     new_board(board, infile); 

    if (chk_row == false) 
     cout << "There is an error" << endl; 

    if (chk_col == false) 
     cout << "There is an error" << endl; 
    chk_sqr(board, 0, 0); 
    if (chk_sqr == false) 
     cout << "There is an error" << endl; 


    if (ch1 == 'D') 
     dis_board(board); 

    infile.get(ch1); 

} 

    } 
    void dis_board(BOARD arr) 
    { 
for (int i = 0; i < MAX; i++) 
{ 
    for (int j = 0; j < MAX; j++) 
     cout << setw(3) << arr[i][j]; 
     cout << endl; 
} 
cout << endl; 
    } 
    void new_board(BOARD arr, ifstream& in) 
    {  
in.ignore(100, '\n'); 
for (int i = 0; i < MAX; i++) 
{ 
    for (int j = 0; j < MAX; j++) 
     in.get(arr[i][j]); 
     in.ignore(100, '\n'); 

} 
    } 
    bool chk_row(BOARD arr, int row, int col) 
    { 
for (int i = 0; i < MAX; i++) 
{ 
    if (i != col) 
    { 
     if (arr[row][i] == arr[row][col]) 
     { 
      return false; 
     } 
    } 
} 
return true; 
    } 
    bool chk_col(BOARD arr, int row, int col) 
{ 
for (int i = 0; i < MAX; i++) 
{ 
    if (i != row) 
    { 
     if (arr[i][col] == arr[row][col]) 
     { 
      return false; 
     } 
    } 
} 
return true; 
     } 
    bool chk_sqr(BOARD arr, int row, int col) 
    { 
int asquare = row/3; 
int bsquare = col/3; 

for (int i = asquare * 3; i < (asquare * 3 + 3); i++) 
{ 
    for (int j = bsquare * 3; j < (bsquare * 3 + 3); j++) 
    { 
     if (!(i == row && j == col)) 
     { 
      if (arr[row][col] == arr[i][j]) 
      { 
       return false; 
      } 
     } 
    } 
} 
return true; 
    } 

На всякий случай я говорю с кем угодно, кроме меня. Я попытался реализовать следующие функции проверки, и, конечно, они работают неправильно. Например, я знаю, что моя первая доска имеет дублирующее число в нижнем правом блоке, но моя функция не может ее найти.C++ sudoku checker row, column, sub square

ответ

0

chk_row - это функция - ее нужно называть. В настоящее время вы просто проверяете:

if (chk_row == false) 

Это просто проверка, является ли указатель функции ложным, чего никогда не произойдет. Вам нужно вызвать функцию следующим образом:

if (chk_row(board, row, col) == false) 

Вам нужно будет работать, что row и col должно быть. Вероятно, вам нужен цикл для проверки всех строк и столбцов, но я считаю, что это домашняя работа, поэтому вы должны попробовать это самостоятельно.