予想のつかない突然のプログラムの終了
Posted: 2018年5月09日(水) 02:17
現在、バックトラック法による数独の解を計算するプログラムを作成しています。
backtrackという関数を用いて、行っているのですが
この関数がうまく動作しないためその原因を探るために、printfでいろんな記号を表示したところ自分の予想もしない部分で終了しています。
どうか解析よろしくお願いいたします。
ボードが表示される際に、
<>+
までしか表示されないというのが不思議です。
VisualStudioCodeでコマンドラインでコンパイル実行しています
backtrackという関数を用いて、行っているのですが
この関数がうまく動作しないためその原因を探るために、printfでいろんな記号を表示したところ自分の予想もしない部分で終了しています。
どうか解析よろしくお願いいたします。
ボードが表示される際に、
<>+
までしか表示されないというのが不思議です。
VisualStudioCodeでコマンドラインでコンパイル実行しています
void backtrack(int board[SIZE][SIZE] , int *board_is , int n){
if( (*board_is) == 0){
printf("no Solve\n");
return ;
}
int row , col;
int p;
if(n == SIZE*SIZE){
//solve Found
printf("solved\n");
printBoard(board , board_is);
return ;
}else{
printf("********* n = %2d\t*********\n" , n);
printBoard(board , board_is);
printf("<");
}
printf(">");
row = p / SIZE;
col = p % SIZE;
printf("+");
printf("board[%d][%d] = %d\n" , row , col , board[row][col]);
if(board[row][col] != 0){
printf("&");
backtrack(board , board_is , n+1);
}else{
//zen tan saku
printf("@");
for(p = 0; p < SIZE; p++){
printf("#");
if( check_row(board,row,(p+1))==1 &&
check_col(board,col,(p+1))==1 &&
check_3x3(board,row,col,(p+1))==1){
printf("_");
board[row][col] = (p+1);
backtrack(board , board_is , n+1);
board[row][col] = 0;
}
}
}
}
void solve(int board[SIZE][SIZE] , int *board_is){
backtrack(board , board_is , 0);
}
int main(){
int board[SIZE][SIZE];
int board_is = 1;
//board_is 0:no solve
// 1:
initBoardZero(board);
initInputBoard(board , &board_is);
printBoard(board , &board_is);
solve( board , &board_is );
return 0;
}