八皇后问题

来源:互联网 发布:ios4邪恶福利软件 编辑:程序博客网 时间:2024/04/30 07:07
#include<cstdio> #include<cmath>bool place(int k) {    for(int j = 1;j<k;j++)    {        if(abs(x[k] - x[j]) == abs(k-j)||x[j] == x[k])            return false;    }    return true;}void backtrack(int t)//t既代表已放置行数,也代表已放置皇后个数 {    if(t>num) //num为皇后的数目    {        sum++;        printf("方案%d如下:\n",sum);        for(int m = 1;m<=num;m++)        {            printf("%d ",x[m]);//这一行用输出当递归到叶节点的时候,一个可行解        }        printf("\n\n");            }    else        for(int i = 1;i<=num;i++)        {            x[t] = i;            if(place(t)) backtrack(t+1);            //此处的place函数用来进行我们上面所说的条件的判断,如果成立,进入下一级递归        }}int main(){    int num = 8;    int sum = 0;    for(int i= 0;i<num;i++)        x[i] = 0;    backtrack(1);}
0 0