再起:数独用 の確認の仕方が良く分かりません。
Posted: 2007年11月02日(金) 01:57
数独をとくためのパーツとして再起関数を作ったのですが、ちゃんと動作するかどうかの確認方法が分からなかったので、質問しています。
以下のことは成り立っているでしょうか?
** やりたいこと **
→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;
}
** --------------------------------- **