#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
int result = 0;//统计总数
struct chess{
vector<int> position;
void show(){
for(int x=0;x<position.size();x++){
cout<<position[x]<<" ";
}
cout<<endl;
}
};
chess add(int x, chess tem){
tem.position.push_back(x);
return tem;
}
void fun(vector<int> available, int count, chess log){
int available_position = available.size();
// cout<<available_position<<endl;
// return ;
if(available_position < count){
return ;//当前剩余数目不够分,则返回
}
else{
if(count == 0){
result += 1;
log.show();//打印当前排列方式
return ;
}
else{
queue<int> residue;
for(int x=0;x<available_position;x++){
residue.push(available[x]);
}
while(!residue.empty()){
int choice = residue.front();
int row = choice/8, column = choice%8;
vector<int> temp;
for(int x=0;x<available_position;x++){
if(!(available[x]%8 == column ||available[x]/8 == row || (abs(available[x]%8-column)== abs(available[x]/8-row))||available[x]<=choice))
temp.push_back(available[x]);
}
residue.pop();
fun(temp, count-1, add(choice, log));
if(count == 8)
cout<<"当前第一个点选取到了 "<<choice<<",当前结果是 "<<result<<endl;
}
}
}
}
int main(){
vector<int> initial;
for(int x=0; x<64;x++){
initial.push_back(x);
}
cout<<"初始元素数目 "<<initial.size()<<endl;
chess vacant;
fun(initial, 8, vacant);
cout<<result<<endl;
} 八皇后问题
最新推荐文章于 2025-06-05 23:34:23 发布

1万+

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



