再起:数独用 の確認の仕方が良く分かりません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

再起:数独用 の確認の仕方が良く分かりません。

#1

投稿記事 by » 18年前

数独をとくためのパーツとして再起関数を作ったのですが、ちゃんと動作するかどうかの確認方法が分からなかったので、質問しています。
以下のことは成り立っているでしょうか?

** やりたいこと **

   →x, j
    ■□■
↓ ■□□
y,i ■■■

□ :条件を満たす( check_number == true )
■ :条件を満たさない
について、

一つ目の□では配列の途中で停止していて、次の四角に進む
そしてその次でも同じことを行い右下に来てしまったらそのとき
前呼び出したところに戻る。
樹形図のような感じで処理していきたいと考えています。

うまく日本語に出来ていませんが、よろしくお願いします。

** --------- **

** 処理内容が足りないスクリプト ** 実行は出来ています **

#include <stdio.h>

#define false 0
#define true 1

int map[9][9];

/*
	a :チェックしたい変数
*/
int check_number(int a, int x, int y)
{
	int i,j;
	
	x=x*3; y=y*3;
	
	for(i=y; i<3+y; i++){
		for(j=x; j<3+x; j++){
			if(map[j] == a)
				return false;
		}
	}
	return true;
}

/*
	本題
*/
void check_pattern(int change_x, int change_y)
{
	int y,x;
	int a=1;

	for(y = 0+change_y; y<3; y++){
		for(x = 0+change_x; x<3; x++ ){
			if(check_number(a, x, y) == true){
				if(x == 2){	//右端の時
					if(y==2)	break;
					else check_pattern(0,1);
				}else{
					check_pattern(1,0);
				}
			}
		}
		change_x=0;
	}
}

int main()
{
	check_pattern(0,0);
	
	return 0;
}
** --------------------------------- **

“C言語何でも質問掲示板” へ戻る