转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8418082.html
1 #include <iostream> 2 #include<math.h> 3 using namespace std; 4 5 int allpos[100000][100];//存储皇后的所有位置 6 int queenpos[100];//存储一次情况的皇后位置queenpos[j]代表第j行,第queenpos[j]列 7 int m=0;//记录符合条件的数量 8 int n; 9 void dfs(int k) 10 { 11 if(k==n) 12 { 13 for(int i=0; i<n; i++) 14 { 15 allpos[m][i]=queenpos[i]; 16 } 17 m++; 18 return; 19 } 20 int i,j; 21 for(i=0; i<n; i++)//遍历第k行,看看有没有合适的位置 22 { 23 for(j=0; j<k; j++) 24 { 25 if(fabs(queenpos[j]-i)==fabs(k-j)||i==queenpos[j]) 26 { 27 break; 28 } 29 } 30 if(j==k) 31 { 32 queenpos[k]=i; 33 dfs(k+1); 34 } 35 } 36 } 37 int main() 38 { 39 cin>>n; 40 dfs(0); 41 cout<<m<<endl; 42 for(int i=0; i<m; i++)//输出所有情况 43 { 44 for(int j=0; j<n; j++) 45 { 46 cout<<allpos[i][j]+1<<" "; 47 } 48 cout<<endl; 49 } 50 }