其他分享
首页 > 其他分享> > pat每日刷题计划--day66

pat每日刷题计划--day66

作者:互联网

递归回溯八皇后复习

注意反向斜线不能使用abs,1和-1对应的是不一样的线

具体操作

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
int n;
int ans[100];
bool hashTable[100];
bool a[100];
bool b[100];
int countnum=0;
void bhh(int num)
{
    for(int x=1;x<=n;x++)
    if(hashTable[x]==false && a[x+num]==false && b[x-num+10]==false)
    {
        if(num==n)
        {
            countnum++;
            if(countnum<=3)
            {
            for(int i=1;i<=n-1;i++)
            {
                printf("%d ",ans[i]);
            }
            printf("%d\n",x);
            }
            return;
        }
        hashTable[x]=true;
        a[x+num]=true;
        b[x-num+10]=true;
        ans[num]=x;
        //cout<<"this part"<<endl;
        bhh(num+1);
        hashTable[x]=false;
        a[x+num]=false;
        b[x-num+10]=false;
    }
}
int main()
{
    scanf("%d",&n);
    memset(hashTable,0,sizeof(hashTable));
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    bhh(1);
    printf("%d\n",countnum);
    return 0;
}
View Code

标签:pat,标记,int,回溯,bool,day66,100,include,刷题
来源: https://www.cnblogs.com/tingxilin/p/12212810.html