P1219 八皇后问题-1

链接:https://www.luogu.org/problemnew/show/P1219

思路:回溯,搜索,标记方法;

可以用四个数组判断+标记;

a[i]=j--可以表示第i行第j个; b[j]==1--表示这一行已经有了;

c[i+j]==1--表示从左上到右下的对角线有了;

扫描二维码关注公众号,回复: 2191837 查看本文章

d[i+n-j]==1--表示从右上到左下的对角线有了;


代码:

#include<iostream>
using namespace std;
int a[10010],b[10010],c[10010],d[10010];
int n,s;

void print()
{
    int i;
    s++;
    if(s<=3)
    {
        for(i=1; i<=n; i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
}
int search(int i)
{
    int j;
    for(j=1; j<=n; j++)
    {
        if(b[j]==0&&c[j+i]==0&&d[i+n-j]==0)
        {
            a[i]=j;
            b[j]=1;
            c[j+i]=1;
            d[i+n-j]=1;

            if(i==n) print();
            else search(i+1);
            b[j]=0;c[j+i]=0;d[i+n-j]=0;
        }
    }
}

int main()
{
    cin>>n;
    search(1);
    cout<<s<<endl;
    return 0;
}


猜你喜欢

转载自blog.csdn.net/wentong_xu/article/details/80754117