filledGrid()の実装が間違っています。ある数字を入れたら、可能性を消すのはそのマスだけではなく、タテヨコに同じ数字が入る可能性も消さなくてはなりません。ちなみにfilledGrid()を少し直しても、解けませんでした。solve()の実装は間違ってないようで、solve2()で数字が決まるたびにreturnするようにしたら、wikipediaの問題が解けるようになりました。具体的にはボックス・列・行に2つ以上同じ数字を入れてしまうなどです。同じ問題に対して同じタイミングで必ず起きる現象なので、デバッグとしては非常に簡単な部類です。この程度の規模のプログラムにも、必ず必要なスキルですので、上達したいなら必ず身に付けてください。ちなみにfilledGrid()を少し直しても、解けませんでした。↑と書きましたが、タテヨコだけではなく、ブロック内の可能性も消す必要がありました。それも直したら、完成しました。solve()とsolve2()の関係については、まだ丁寧に見てません。ちぐはぐな所があるようですので、重要な問題を指摘しにくいです。4年前solve()とsolve2()を見てみました。どちらも無駄は多いですが、致命的な誤りはありません。慌てて直す必要はないですが、一応伝えると、206行目と207行目、221行目と222行目は、それぞれ入れ替えた方がいいです。機械的に入れ替えるのではなく、論理的な意味を考えて入れ替えてください。ここまでの修正をすると、2つの関数はどちらも、for(Line)、for(Column)、ifで始まります。ifの内側の前半にsolve()由来のコード、後半にsolve2()由来のコードを書くことで、まとめることができるでしょう。まとめるべきか、ということについては、私ならまとめません。solve()は「4.フラグが1つしかないマスは確定」を実装していて、solve2()は「5.縦、横、同じブロックでフラグが1つしかない数字はその箇所を確定」を実装しています。アルゴリズムが別なので、関数も分けた方がよいと思います。この辺は好みの問題でもあります。C言語とC++言語が混ざっている。printfとcinが並んでいたりしています。どちらの言語を使うか方針を決めて、Cらしく、あるいは、C++らしく書きましょう。両者を区別することは大事で、それによって言語の特徴をつかみやすくなると思います。コンソールの入出力と、ファイルの入出力からでしょうか。配列banが2つの別のデータを扱っている。確定した数字と入る可能性のある数字は別のデータです。前者は2次元配列に、後者は別の3次元配列で管理しましょう。3次元配列の型はboolが良いでしょう。書き出したらキリがないので、大きな指摘のみです。1番目は既に書いたデバッグができないことで、これが最重要課題です。返信ありがとうございます。下に変更後のコードを載せておきました。以下の変更をしました。flagbanに分ける・filledGrid()の大幅改善また、下のように指摘されたところも修正したつもりですが、これは機械的に入れ替えていることになっているのではないでしょうか?もし、そうだとしたら論理的に入れ替えるとはどういう意味なのか教えて下さい。206行目と207行目、221行目と222行目は、それぞれ入れ替えた方がいいです。機械的に入れ替えるのではなく、論理的な意味を考えて入れ替えてください。実行結果については、同じ数字を行・列・ボックスに2つ以上入れるようなことはなくなりました。多くの空白を残しています。なんとしても解けるようにしたいです。たくさんのご指摘お待ちしております。ポイントを定義します。したら論理的に入れ替えるとはどういう意味なのか教えて下さい。入れ替えたのか、説明ができるなら結構です。実行結果については、同じ数字を行・列・ボックスに2つ以上入れるようなことはなくなりました。多くの空白を残しています。なんとしても解けるようにしたいです。たくさんのご指摘お待ちしております。この件については、私もyokoさんも既に書いています。実行結果については、同じ数字を行・列・ボックスに2つ以上入れるようなことはなくなりました。多くの空白を残しています。なんとしても解けるようにしたいです。たくさんのご指摘お待ちしております。この件については、私もyokoさんも既に書いています。9といった結果になり、これ以上空白は埋まりませんでした。みると、左上のボックスに4が二つ入っています。yokoさん、コードのアップお願いします。→書いていますとのことですが、これは残ってしまった空白はバックトラック法で解くということでしょうか?単純なバックトラック以外についてだと、No.2、No.3、No.6、No.7に書かれています。意味が判らないなら、その旨を質問してください。みると、左上のボックスに4が二つ入っています。これをみる限り、コードがまちがっていると思うのですが、間違いはありませんか?当然間違っています。「考え方か実装に間違いがあるから解けない」という状態です。気になるマスのデバッグ?(フラグを状態を表示)したところ、filledGrid()がおかしいことがわかり、少しfilledGridを書き換えたところ、無事にwikipediaの問題を解くことができました。難しい問題はまだ解けません。バックトラック法は使いたくないので、以前に紹介されましたサイトなどで「数独」を勉強してプログラムにかけるよう頑張ります。コードが書け(て問題が起き)次第また来ます。たくさんの回答ありがとうございました。現在のコードは載せるべきですか?掲示板のルールに次のように書かれています。「また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。」まだ完全に解決はしてないと思いますが、キリが良いところで載せてもらいましょうか。誰かの役に立つかもしれませんし、別の指摘をもらえるかもしれません。最後に、最初から気になっていたけどスルーしていた点。細かいことですが、次のように書き換えた方がよいと思います。1」という式に意味はありませんので。4年前まだ全ての問題を解けるわけでもなく、無駄も多いかと思いますがある程度のレベルは解けるようになりましたので、コードを載せておきます。今後、より高難度の問題をどのようにして解けるようにするか、バックトラックを使うかはグループの人間と相談したいと思います。たくさんの回答ありがとうございました。ポイントを定義します。ミクプラは自由にリンクできます。