int count=0;
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) count++;
return;
}
for(int x=1;x<=n;x++){
if(hashTable[x]==false){
p[index]=x;
hashTable[x]=true;
generateP(index+1);
hashTable[x]=false;
}
}
}
void generateP(int index){
if(index==n+1){
count++;
return;
}
for(int x=1;x<=n;x++){
if(hashTable[x]==false){
bool flag=true;
for(int pre=1;pre<index;pre++){
if(abs(index-pre)==abs(x-p[pre])){
flag=false;
break;
}
}
if(flag){
p[index]=x;
hashTable[x]=true;
generatep(index+1);
hashTable[x]=false;
}
}
}
}
//n皇后(全排列算法)//回溯法
最新推荐文章于 2024-11-19 13:00:00 发布
这段代码实现了一个使用递归生成整数数组全排列的算法,并通过使用哈希表优化,避免了重复的排列。当索引到达数组长度加一时,检查当前排列是否满足条件(元素间的绝对差不等于其对应位置的绝对差),若满足则计数增加。对于每个未使用的数字,将其放入当前位置并继续递归,最后回溯。
1509

被折叠的 条评论
为什么被折叠?



