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