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 번 믿는 각 열의 확인을 인쇄합니다.
은 사전에 감사합니다.
디버깅을하려는 경우 모든 스레딩 내용을 제거하고 단일 스레드에서 함수를 호출하면됩니다. –