c-n皇后代码-1.1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caishu1995/article/details/85201460
#include "stdio.h"
#include "string.h"
 
int king(int n , int *left , int *right , int *down , int i , int *res)
{
    int k;                        //底下一行无法放置皇后为1
    int j;
    for(j = 0 ; j < n ; j++)
    {
        if( ( down[j] == 0 ) && ( left[j+i] == 0 ) && ( right[i-j+n-1] ==0 ) )
        {
            down[j] = 1;
            left[j+i] = 1;
            right[i-j+n-1] =1;
 
            if( i == n-1 )
            {
                *res = *res + 1 ;
                down[j] = 0;
                left[j+i] = 0;
                right[i-j+n-1] =0;
                continue;
            }
 
            k = king( n , left , right , down , i+1 , res );
 
            if(k == 1)
            {
                down[j] = 0;
                left[j+i] = 0;
                right[i-j+n-1] =0;
                continue;
            }   
        }
    }
 
    if( j == n )
    {
        return 1;
    }
    return 0;
}
 
int main()
{
    int n,i = 0,res = 0;
    int left[20],right[20],down[10];   //用0,1来确定是否有皇后在同线
 
    memset ( left , 0 , sizeof(left));
    memset ( right , 0 , sizeof(right));
    memset ( down , 0 , sizeof(down));
 
    while( scanf("%d",&n) != EOF)
    {
        king( n , left , right , down , i , &res);
        printf("%d\n",res);
        res = 0;
    }
 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/caishu1995/article/details/85201460