#include <iostream> using namespace std; int a[10]; int n,ans; void print() { if(ans>3) return; else { for(int i=1;i<=n;i++) { cout<<a[i]<<' '; } cout<<endl; } } bool check(int x,int y) { for(int i=1;i<=x;i++) { if(a[i]==y) return false; //第一种情况就是在同一列内不存在多个皇后 if(a[i]+i==x+y) return false;//正对角线上不能存在多个皇后 if(i-a[i]==x-y) return false;//负对角线也不能存在多个皇后 } return true; } void dfs(int row) { if(row==n+1) //此处的相等就是条件 是他能成功的最小边界 { ans++; print(); return ; } for(int i=1;i<=n;i++) { if(check(row,i)) { a[row]=i;//第row行元素放在第i列 dfs(row+1);//此处需要回溯,因为解决的是共有多少种解 a[row]=0; } } } int main() { cin>>n; dfs(1); cout<<ans<<endl; return 0; }