我试图通过一维数组和递归解决n queen问题。 正如您在代码数组中所看到的那样,索引是列号,而数组的值是女王的行号。位置。 我认为我给函数check_safe的if语句提供了正确的条件,但它没有完全定位皇后。
例如)输入N:12
1 3 0 2 4 8 10 0 0 5 7 0
任何人都可以帮我找到导致问题的位置吗?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <math.h>
void put_queen (int column, int* array, int array_size);
bool check_safe (int column, int row, int* array);
int main (void){
int* array;
int array_size, column;
printf("Input N: ");
scanf("%d", &array_size);
array = (int*) calloc( array_size, sizeof(int) );
srand(time(NULL));
array[0]= rand() % array_size;
column = 1;
put_queen(column, array, array_size);
//print the result
for( column = 0; column < array_size; column++){
printf("%3d", array[column]);
}
free(array);
return 0;
}
bool check_safe (int column, int row, int* array){
for(int index = 0 ; index < column; index++ ){
if( (row == array[index]) || (abs(row - array[index]) == abs(index-column) )){
return false;
}
}
return true;
}
void put_queen (int column, int* array, int array_size){
for( int row = 0; row < array_size; row++){
if(check_safe(column, row, array)){
array[column] = row;
break;
}
}
if( column == array_size - 1){return ;}
put_queen( column + 1, array, array_size);
}