#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
//输出八皇后问题的解
vector<int> A;
int Q[8][8]={0};
bool Judge(int row,int col){
for(int i=0;i<8;i++){//判断列
if(Q[i][col]==1){
return false;
}
}
for(int i=row,j=col;i>=0&&j>=0;i--,j--){//判断左上角
if(Q[i][j]==1){
return false;
}
}
for(int i=row,j=col;i>=0&&j<8;i--,j++){
if(Q[i][j]==1)
return false;
}
return true;
}
void DFS(int row,int ans){
if(row==8){
A.push_back(ans);
return;
}
for(int col=0;col<8;col++){
if(Judge(row,col)){
Q[row][col]=1;
DFS(row+1,ans*10+col+1);
Q[row][col]=0;
}
}
}
int main(){
DFS(0,0);
sort(A.begin(),A.end());
int index;
while(scanf("%d",&index)!=EOF){
cout<<A[index-1]<<endl;
}
}
八皇后问题
最新推荐文章于 2025-12-07 23:01:27 发布
本文通过深度优先搜索算法实现八皇后问题的求解,并详细展示了如何判断每一步放置是否合理,最终输出所有可行解。
1714

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



