#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int n,count1=0;
int p[110];
bool hashTable[110]={false};
void generatep(int index)
{if(index==n+1){bool flag=true;//排列是否合法的標志for(int i=1;i<=n;i++)//枚舉任意兩個皇后{for(int j=i+1;j<=n;j++){if(abs(i-j)==abs(p[i]-p[j]))//約束條件,不在同一條對角線上flag=false;}}if(flag) count1++;return;}for(int x=1;x<=n;x++){if(hashTable[x]==false){p[index]=x;hashTable[x]=true;generatep(index+1);hashTable[x]=false;}}
}
int main()
{scanf("%d",&n);generatep(1);printf("%d",count1);return 0;
}
void generatep(int index)
{if(index==n+1)//如果到達遞歸邊界,就一定滿足條件{count1++;return;}for(int x=1;x<=n;x++){bool flag=true;if(hashTable[x]==false){for(int pre=1;pre<index;pre++)//先判斷x與之前的皇后有無沖突{if(abs(index-pre)==abs(x-p[pre])){flag=false;break;}}if(flag)//如果沒有沖突,就把x放入{p[index]=x;hashTable[x]=true;generatep(index+1);hashTable[x]=false;}}}
}
?
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态