#include<iostream> using namespace std; //当前检测的行列 是否 符合条件 //从1行1列开始 bool check(int row,int col,int *list) { for(int i=1;i<row;i++) { if(col==list[i]) { return false; } else if(abs(row-i)==abs(list[i]-col)) { return false; } } list[row]=col; return true; } void queen(int n) { //回溯方法 int *array=new int[n+1]; memset(array,0,n+1); int k=1;//当前行 while(k>=1) { array[k]=array[k]+1;//检测该行下一列的点 while(!check(k,array[k],array)&&array[k]<=n) { array[k]=array[k]+1; //若不符合就将该行的检测值一直右移 } //若改点符合 if(array[k]<=n&&k==n) { for(int i=1;i<=n;i++) { cout<<array[i]<<" "; } cout<<endl; } else if(array[k]<=n&&k<n) { k=k+1; } else { array[k]=0; k=k-1; } } } int main() { queen(20); getchar(); return 0; }