で妥当性をチェックしていますので、私はC++でsudoku有効性チェッカープログラムを作成しています。プログラムは既に完成したスドクボードを持つcsvファイルを取り込みます。プログラムはファイルを1行ずつ読み込み、数値を2次元配列に格納することになっています(これはうまくやっています)。私は、行に重複した数字があるかどうかをチェックすることに固執しています(私はこの仕事を得ることができれば、列はかなり似ているはずです)。私はアルゴリズムが私の頭の中でうまくいくはずですが、私はちょうどそれをコードに入れることはできません。2次元配列
アルゴリズム:
1)それぞれの行を見て、彼らは唯一のすべてであれば(一度に表示されていることを確認してから9までの数字1をチェック)
2)重複があることを意味します(発見された場合いくつかの番号が欠落しています)、エラーが見つかった行と列をユーザーに伝えます。
3)それ以外の場合は次の行に移動し、それは私はこのforループを実行していることになっていると思い
もう一度やるが、上の長い私はC言語でコーディングされてきたので、時間++と何をされていますインターネットは私にとってとても役に立ちました。
何か助けていただければ幸いです。ここで
は、これまでの私のコードです:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <thread>
using namespace std;
int *board[9];
int row, col;
void printBoard();
void is_row_ok();
int main()
{
for (int i = 0; i < 9; ++i)
{
board[i] = new int[9];
}
printBoard();
is_row_ok();
cout << endl;
return 0;
}
void printBoard()
{
string line;
string val;
ifstream myFile("Testfile1.txt");
for (int row = 0; row < 9; ++row)
{
string line;
getline(myFile, line);
if (!myFile.good())
break;
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] << " ";
}
}
cout << endl;
cout << endl;
}
void is_row_ok()
{
bool found = false;
int i, j;
for (int i = 0; i < 10; ++i) //<------ edit starts here
{
int counter = 0;
for (int j = 0; j < 9; ++j)
{
if(board[row][j] == i)
{
cout << "Before " << counter << endl;
counter++;
cout << counter << endl;
}
if(counter > 1)
break;
}
}
}
私は上記のコードを実装していくつかの印刷ステートメントを追加しました。実行したときには、 "Before 0"と "1"の繰り返しを印刷しました。私は何か間違ったことをしましたか –
カウンターを印刷しています。カウンターは0または1です。2の場合、ループを終了します。はい、OKです。私はあなたがブール値を使用しているのを見ます。コードを編集して機能させるようにします。 – Capie