判定式の作成

1−3で書いた@〜Bの判定を組み込みます。
@同じ行には同じ数字が入らない
A同じ列には同じ数字が入らない
B3×3のマス(T〜\)内に同じ数字が入らない

各マス(row,col)を確認。
(row,col)にn(0以外の数字)が入っていたら。
conf_item!=0;

@同じ行のマスの候補からnを外す。
 item[row][1〜9][n]=0;
A同じ列のマスの候補からnを外す。
 item[1〜9][col][n]=0;
B該当する3×3のマス内からnを外す。
 どの3×3のマスに入っているかは判定式を作成する。
行、列から下のように場合分けを行う。
row1〜3→i=1
row4〜6→i=4
row7〜9→i=7
col1〜3→j=1
col4〜6→j=4
col7〜9→j=7
そして3×3のマスの候補からnを外す。
item[i〜i+3][j〜j+3][n]=0;

これによって数字が入っていないマスに入る候補を削っていきます。 候補が1つの数字だけになったら確定conf_itemに入れていけば簡単なナンプレ問題は解くことができます。
途中まで以下にソースコードを載せます。このままでは無限ループから抜け出せないので次回にある程度問題が解けるまでにしたいと思います。

ファイルの読込み(ソースコード)


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ROW 10
#define COL 10
#define N 10
int main(int argc, char* argv[]) {
    int i, j, n, row, col, cnt = 0, change;
    int row_matrix, col_matrix;/*matrix判定時に使用する*/
    int item[ROW][COL][N], conf_item[ROW][COL];
    char gomi[100];
    FILE  *Input_File, *Output_File;
    /*Step1 初期化*/
    for (row = 0; row < ROW; row++) {
        for (col = 0; col < COL; col++) {
            conf_item[row][col] = 0;/*初期は未定*/
            for (n = 0; n < N; n++) {
                item[row][col][n] = 1;/*初期はすべての数字に可能性がある*/
            }
        }
    }
    /*---File準備---*/
    /*in*/
    if (fopen_s(&Input_File, argv[1], "r")) {
        printf("FILE OPEN FAILURE!!\n");
    }
    /*out*/
    if (fopen_s(&Output_File, "out.txt", "w")) {
        printf("FILE OPEN FAILURE!!\n");
    }
    printf("-----%s-----\n", argv[1]);
    /*---File準備終わり---*/
    /*---Step2 File読み込み---*/
    for (row = 1; row < ROW; row++) {
        /*conf_itemに入力データを入れ込む*/
        fscanf_s(Input_File, "%d,%d,%d,%d,%d,%d,%d,%d,%d\n", 
						&conf_item[row][1], &conf_item[row][2], &conf_item[row][3], 
						&conf_item[row][4], &conf_item[row][5], &conf_item[row][6], 
						&conf_item[row][7], &conf_item[row][8], &conf_item[row][9]);
    }
    /*itemに入力データを入れ込む。確定しているマスには該当する数字のitemに1、それ以外のitemに0を入れる。*/
    printf_s("Input_File\n");
    fprintf_s(Output_File, "Input_File\n");
    for (row = 1; row < ROW; row++) {
        for (col = 1; col < COL; col++) {
            if (conf_item[row][col] != 0) {
                for (n = 0; n < N; n++) {
                    item[row][col][n] = 0;
                }
                item[row][col][conf_item[row][col]] = 1;
            }
            printf_s("%d,", conf_item[row][col]);
            fprintf_s(Output_File, "%d,", conf_item[row][col]);/*出力ファイルに入力データを出力*/
        }
        printf_s("\n");
        fprintf_s(Output_File, "\n");
    }
    /*---item入力完了---*/
    fclose(Input_File);
    /*ここからStart*/
    /*無限Loop。値がすべて求まったor更新できなくなったら終了とする。*/
    while (1) {
        /*---検索Start---*/
        for (row = 1; row < ROW; row++) {
            for (col = 1; col < COL; col++) {
                if (conf_item[row][col] != 0) {
                    /*---検索条件@row---*/
                    for (j = 1; j < COL; j++) {
                        if (conf_item[row][j] == 0) {
                            item[row][j][conf_item[row][col]] = 0;
                        }
                    }
                    /*---検索条件@完了---*/
                    /*---検索条件Acol---*/
                    for (i = 1; i < ROW; i++) {
                        if (conf_item[i][col] == 0) {
                            item[i][col][conf_item[row][col]] = 0;
                        }
                    }
                    /*---検索条件A完了---*/
                    /*---検索条件Bmatrix---*/
                    /*どの配列に含まれる数字化判断する*/
                    if (row <= 3) {
                        row_matrix = 1;
                    }
                    else if (row <= 6) {
                        row_matrix = 4;
                    }
                    else {
                        row_matrix = 7;
                    }
                    if (col <= 3) {
                        col_matrix = 1;
                    }
                    else if (col <= 6) {
                        col_matrix = 4;
                    }
                    else {
                        col_matrix = 7;
                    }
				/*---配列判断終了---*/
			for (i = row_matrix; i < row_matrix + 3; i++) {
				for (j = col_matrix; j < col_matrix + 3; j++){
					if (conf_item[i][j]==0) {
						item[i][j][conf_item[row][col]=0;
					}
				}
			}
                    /*---検索条件B完了---*/
                }
            }
        }
    }
        /*---検索完了---*/
    /*---File読み込み終わり---*/
    fclose(Output_File);
    /*--コマンドライン停止用、意味はない--*/
    scanf_s("%s", gomi, 100);
}

<<0.考え方 <<1.ファイルの準備 >>3.判定式の作成A