8皇后问题的解法

来源:爱站网时间:2020-11-09编辑:网友分享
对于8皇后问题的解法是不是很多用户们都不了解的呢,那么今天爱站小编就将为大家进行详细介绍8皇后问题的解法。

对于8皇后问题的解法是不是很多用户们都不了解的呢,那么今天爱站小编就将为大家进行详细介绍8皇后问题的解法。

 

#include

 

#define MAX 200
#define Empty 0
#define Full 1
#define N 8

unsigned char qipan[N][N][N]={MAX};//初始化8张棋盘表示每下一步的
void input(int i);
int count = 0;

int main()
{
    input(0);
    getchar();
    return 0;
}
void input(int i)
{
    int x=0,y=0;
    int p=0,q=0;
    int flag = 0;
    //初始化当前棋盘
    if(i!=0)
    {
        for(x=0;x         {
            for(y=0;y             {
                qipan[i][x][y] = qipan[i-1][x][y];
            }
        }
    }
    else
    {
        for(x=0;x         {
            for(y=0;y             {
                qipan[i][x][y] = MAX;
            }
        }
    }
    //递归结束
    if(i==N)
    {
        count++;
        for(x=0;x         {
            for(y=0;y             {
                printf("%d ",qipan[i-1][x][y]);
            }
            printf("\n");
        }
        printf("%d\n",count);
        return;
    }

    for(y=0;y     {
        //找到空位
        if(qipan[i][i][y]==MAX)
        {
            //另其为1
            qipan[i][i][y] = 1;
            //前后左右上下都置为0
            for(p=0;p             {
                for(q=0;q                 {
                    if(q==y||p==i||(p-i)==(q-y)||(p-i)==(y-q))
                        if(qipan[i][p][q] == MAX)
                            qipan[i][p][q] = 0;
                }
            }
            if(flag != -1)
            {
                //找下一个
                input(i+1);
            }
            //将棋盘变回本层原样
            for(p=0;p             {
                for(q=0;q                 {
                    if(i!=0)
                    qipan[i][p][q] = qipan[i-1][p][q];
                    else
                    qipan[i][p][q] = MAX;
                }
            }
            flag =0;
        }
    }
    //找不到空位结束
    return;
}

今天爱站小编为大家介绍8皇后问题的解法就到这里了,希望本文内容对大家学习有所帮助,想了解更多C语言知识就在爱站技术频道。

上一篇:欧几里德算法

下一篇:C++中公共对象关键字的用法

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载