2017-03-10 3 views
0

무엇이 잘못되었고 어떻게 수정해야하는지 알아내는 데 도움이 필요합니다. 스도쿠 보드가 유효한지 아닌지를 확인하는 프로그램을 만들려고합니다. 나는 행에 대한 검사를 받았고 열의 유효성을 확인했지만 사각형 유효성 검사가 어려움을 겪고 있습니다. 여기 내 코드는 다음과 같습니다.스도쿠 스퀘어 확인

#include <iostream> 
#include <string> 
#include <fstream> 
#include <sstream> 
#include <pthread.h> 

using namespace std; 

int *board[9]; 
int row, col; 
void *is_row_ok(void *param); 
void *is_col_ok(void *param); 
void *is_square_ok(void *param); 

int main() 
{ 
    for (int i = 0; i < 9; ++i) 
    { 
     board[i] = new int[9]; 
    } 

    string line; 
    ifstream myFile("Testfile3.txt"); 

    for (int row = 0; row < 9; ++row) 
    { 
     string line; 
     getline(myFile, line); 

     stringstream iss(line); 
     cout << endl; 

     for (int col = 0; col < 9; ++col) 
     { 
      string val; 
      getline(iss, val, ','); 
      if (!iss.good()) 
       break; 

      stringstream convertor(val); 
      convertor >> board[row][col]; 
      cout << board[row][col] << " "; 
     } 
    } 

    pthread_t thread1; 
    pthread_t thread2; 
    pthread_t thread3; 

    pthread_create(&thread1, NULL, is_row_ok, NULL); 
    pthread_create(&thread2, NULL, is_col_ok, NULL); 
    pthread_create(&thread3, NULL, is_square_ok, NULL); 

    pthread_join(thread1, NULL); 
    pthread_join(thread2, NULL); 
    pthread_join(thread3, NULL); 

    cout << endl; 
    return 0; 
} 

void *is_col_ok(void *param) 
{ 
    int element_count = 0; 
    char element_value; 
    for (int i = 0; i < 9; ++i) 
    { 
     for (int j = 0; j < 9; ++j) 
     { 
      element_count = 0; 
      element_value = board[i][j]; 
      if (element_value != ' ') 
      { 
       for (int k = 0; k < 9; ++k) 
       { 
        if (board[k][j] == element_value) 
         element_count++; 
       } 
      } 
      if (element_count >= 2) 
      { 
       cout << "Column " << j << " is invalid." << endl; 
       break; 
      } 
      else 
      { 
       cout << "Column " << j << " is valid." << endl; 
      } 
     } 
    } 
    pthread_exit(NULL); 
} 

void *is_square_ok (void *param) 
{ 
    int square = 0; 
    int element_count = 0; 
    char element_value; 
    for (int m = 0; m < 9; m+3) 
    { 
     for (int n = 0; n < 9; n+3) 
     { 
      for (int i = m; i < m+3; i++) 
      { 
       for (int j = n; j < n+3; j++) 
       { 
        element_count = 0; 
        element_value = board[i][j]; 
        if (element_value != ' ') 
        { 
         for (int k = m; k < m+3; k++) 
         { 
          for (int l = n; l < n+3; l++) 
          { 
           if (board[k][l] == element_value) 
            element_count++; 
          } 
         } 
        } 
       } 
      } 
     } 
     square++; 
     if (element_count >= 2) 
     { 
      cout <<"Square " << square << " is invalid." << endl; 
     } 
     else 
     { 
      cout <<"column " << square << " is valid." << endl; 
     } 
    } 
    pthread_exit(NULL); 
} 

의도적으로 제대로 작동하기 때문에 행 검사 기능을 생략했습니다. 누군가가 나를 크게 감사하게 될 내 사각형 검사 기능을 수정하는 방법을 알아내는 데 도움이 될 수 있다면.

P. 누군가가 내 칼럼 검사 기능을 살펴보고 칼럼 검증을 한 번만 인쇄 할 수있는 방법을 알게되면 매우 도움이 될 것입니다. 현재 그것은 외부 루프로 인해 9 번 믿는 각 열의 확인을 인쇄합니다.

은 사전에 감사합니다.

+0

디버깅을하려는 경우 모든 스레딩 내용을 제거하고 단일 스레드에서 함수를 호출하면됩니다. –

답변

2
for (int m = 0; m < 9; m+3) 

여기에서 "m + 3"은 절대적으로 아무것도하지 않습니다. m + = 3이어야합니다.