第6講 残された課題の解消とマルチスレッド化
第4話 シングルスレッド数独自動生成ソフトの完成?
?を入れましたが、ヒント数が多い場合の理詰めで解けるソフトの開発に99%成功だと思っています。


void hy() {
  for (char i = 0; i < 26; i++)cout << " -"; //最初の横線
  cout << endl;
  for (char i = 0; i < n; i++) {
    cout << "|";//最初の縦線
    for (char j = 0; j < n; j++) {
      if (gensudoku[i][j] > 0) {
        cout << " " << +gensudoku[i][j] << " "; //2次元配列を2次元に並べる
      }
      else {
        cout << " " << " " << " "; //2次元配列を2次元に並べる
      }
      if (j % 3 == 2)cout << "|";//2本目3本目の縦線
    }
    if (i % 3 == 2) {
      cout << endl;
      for (char j = 0; j < 26; j++)cout << " -"; //2本目3本目の横線
    }
    cout << endl;
  }
  cout << "ヒント数 = " << +hnt << endl;
  cout << "数独作成時間は" << (double)(ow0 - hj0) / CLOCKS_PER_SEC << "秒です。" << endl << endl;
  for (char i = 0; i < 26; i++)cout << " -"; //最初の横線
  cout << endl;
  for (char i = 0; i < n; i++) {
    cout << "|";//最初の縦線
    for (char j = 0; j < n; j++) {
      if (sudoku[i][j] > 0) {
        cout << " " << +sudoku[i][j] << " "; //2次元配列を2次元に並べる
      }
      else {
        cout << " " << " " << " "; //2次元配列を2次元に並べる
      }
      if (j % 3 == 2)cout << "|";//2本目3本目の縦線
    }
    if (i % 3 == 2) {
      cout << endl;
      for (char j = 0; j < 26; j++)cout << " -"; //2本目3本目の横線
    }
    cout << endl;
  }
  cout << "数独を解くのにかかった時間は" << (double)(ow1 - hj1) / CLOCKS_PER_SEC << "秒です。" << endl;
}

改良した場所を示しましたが、

抜けている個所もあるかもしれませんので

いつの通りテキストファイルを入れておきます。

さて、残された課題はすべて解消されました。

いよいよマルチスレッド化に入ります。

下は私たちが今開発中のCVSデータを取り込んでいます。

私の仮説がただしいことを裏付けるエクセルファイル
シングルスレッド自動生成ソフトヒント数40
もしダウンロードできない場合はテキストファイルのプロジェクトを実行させたときにできるファイルですから、
問題ありません。
ファイルができる場所は設定によって異なるでしょうが、
私の実行ファイルはC:\Users\fmut1\source\repos\Project3\x64\Debugというフォルダに入っています。
参考にして探してください。
何処かにフォルダを作ってシングルスレッド自動生成ソフトヒント数40エクセルファイル2つをそのフォルダの中に入れてsudoku0をダブルクリックすると
上と同じ場面になります。
は計28回実験して、全部理詰めで解けたことを示しています。
実はエクセルVBAのコードを見ればこれから先を見通すことができます。
VBAで作ったコードをC++に変更してマルチスレッド化したものが皆様が体験したソフトです。

もし実験して理詰めで解けないケースがありましたが、
fmut1621@hotmail.co.jp
まで連絡していただけると助かります。
2023年10月19現在

おそらくこの講義を見に来ている人は数独の腕は名人級でしょうから、
ヒント数40では話になりませんがこのソフトは実行ボタンを押すと問題とともに解答も示されます。
解答場所1を使えば、正しいときには
となります。
第3話へ
 第5話へ

トップへ