n皇后问题

来源:互联网 发布:润锦众成网络借贷 编辑:程序博客网 时间:2024/05/21 08:58

程序运行如下:


代码如下:

#include <stdio.h>

#include <math.h>
#define N 15


int x[N];          //皇后放置的列数
int n;            //皇后个数
int sum=0;        //可行解个数
void printSolution(int n);
int place(int k)
{
    int i;
    for(i=1; i<k; i++)
        if(fabs(k-i)==fabs(x[k]-x[i])||x[k]==x[i])
            return 0;
    return 1;
}
int queen(int k)
{
    int i;
    if(k>n)
    {
        printSolution(k);
        sum++;
    }
    else
        for(i=1; i<=n; i++)
        {
            x[k]=i;
            if(place(k))
                queen(k+1);


        }
    return sum;
}
void printSolution(int n)
{
    int i, j;
    for (i = 1; i <= n; i++)
    {
        for (j=1; j<=n; j++)
        {
            if (j == x[i])
                printf("%d ",j);
        }


    }
    printf("\n");
    for (i = 1; i <n; i++)    /*输出第i行*/
    {
        for (j=1; j<n; j++)
        {
            if (j == x[i])    /*第x[i]列输出Q,其他列输出*号 */
                printf("Q");
            else
                printf("*");
        }
        printf("\n");
    }
    printf("\n");
}


int main()
{
    printf("Please input n:(n<15):\n");
    while(scanf("%d",&n)!=EOF)
    {
        sum=0;
        printf("一共有%d种解\n",queen(1));
    }
    return 0;
}

原创粉丝点击