gpt4 book ai didi

c - C 中的回溯

转载 作者:行者123 更新时间:2023-11-30 20:26:57 26 4
gpt4 key购买 nike

我听说过回溯,并且进行了一些搜索。我想我明白了并编写了这段代码来解决数独问题,但它似乎给出了错误的解决方案(例如连续出现重复的数字) ,我到底做错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>


#define N 9

bool not_in_row(int temp , int i , int grid[N][N]){

int f ;
for(f = 0 ; f < N ; f++)
if(grid[i][f] == temp)
return false ;
return true ;
}

bool not_in_column(int temp , int j , int grid[N][N]){

int f ;
for(f = 0 ; f < N ; f++)
if(grid[f][j] == temp)
return false ;
return true ;
}


bool not_in_sq(int i , int j , int grid[N][N] , int temp){

int k , t ;
int s = i - (i % 3) + 3, v = j - (j % 3) + 3;
for(k = i - (i % 3) ; i < s ; i++)
for(t = j - (j % 3) ; j < v ; j++)
if(grid[k][t] == temp)
return false ;
return true ;
}


bool sudoku_Solver(int grid[N][N] , int position){



if(position == 81)
return true ;
int i = position / 9 , j = position % 9 ;

if(grid[i][j] != 0)
return sudoku_Solver(grid , position + 1) ;


else{

int temp ;

for(temp = 1 ; temp <= N ; temp++){
if(not_in_row(temp , i , grid) && not_in_column(temp , j , grid) && not_in_sq(i , j , grid , temp))
{
grid[i][j] = temp ;
if(sudoku_Solver(grid , position + 1))
return true ;
}
}

}
grid[i][j] = 0 ;
return false ;
}


int main(int argc, char *argv[]) {

int i , j ;
int grid[9][9] = {{0,1,0,0,4,0,0,0,0}
,{6,0,0,0,0,0,0,1,8}
,{0,0,0,1,0,9,0,3,2}
,{2,0,5,0,0,3,8,0,0}
,{0,0,0,0,0,0,0,0,0}
,{0,0,4,7,0,0,1,0,5}
,{8,6,0,2,0,5,0,0,0}
,{4,2,0,0,0,0,0,0,9}
,{0,0,0,0,3,0,0,7,0}
} ;

sudoku_Solver(grid , 0) ;

for(i = 0 ; i < 9 ; i++){
for(j = 0 ; j < 9 ; j++){
printf("%d " , grid[i][j]) ;
}
printf("\n") ;
}
return 0;
}

最佳答案

您在 not_in_sq 中的循环错误的是:

for(k =  i - (i % 3) ; i < s ; i++)
for(t = j - (j % 3) ; j < v ; j++)

仔细看看i < s , i++ , j < v ,和j++ 。他们显然是不正确的。这里它们是固定的:

for(k =  i - (i % 3) ; k < s ; k++)
for(t = j - (j % 3) ; t < v ; t++)

关于c - C 中的回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com