N皇后有阵列和递归

时间:2017-10-09 05:22:07

标签: c

我试图通过一维数组和递归解决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);
}

0 个答案:

没有答案