前提・実現したいこと
初めまして。都内の普通高校に通うとものです。
私は今、独学でC++のプログラミングを1年ほど学んでおり、夏の期間を使って趣味の数独の採点プログラムを作ろうと考えておりました。
プログラムを組むにあたり、下記のアルゴリズムでの疑似コードを教えていただきたいです。
あるマスに候補数字が一つしかなければそのマスはその候補数字で確定するというロジックです。
下図で○のついた候補数字4のあるマスは4以外の候補数字がないため、このマスは4で確定します。 半角は数独でいうマスに入る可能性の添え字です。
1 5 68 1 5 68
④ 3 9 → 4 3 9
48 7 2 8 7 2
どうかご教授いただければ幸いです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
/** * 単一候補法 * @param mat * @param candmat */ public void SinglizeCandidateLogic(int[][] mat, int[][] candmat) { List<Integer> candList = new ArrayList<>(); for (int i = 0; i < Utility.ROW; i++) for (int j = 0; j < Utility.COL; j++) if (candmat[i][j] > 0) { //候補の取得 candList = Utility.GetOnBitList(candmat[i][j]); if (candList.size() == 1) {//1個しか候補なかったら記憶したビットに対応する数字を確定 mat[i][j] = candList.get(0); Utility.ExcludeCandidateInRowColBlock(candmat, new Point(i, j), (int)Math.pow(2, candList.get(0))); } } }
試したこと
コードは試しに書いてみたものですが正確性に乏しいので見なくても大丈夫です。アルゴリズムだけご教授を頂きたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/08/27 21:23
2020/08/28 01:23
2020/08/28 01:47