八皇后问题,是用递归方法,下面的实现方案比较简洁。注意细节,用户的输入是从1开始的。
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int ans[92][8] = {0}; int newTry[8] = {0}; int count = 0; void getAllAns(int i) { if(i == 8) { for(int m = 0;m < 8;m++) ans[count][m] = newTry[m] + 1; count++; return; } for(int k = 0;k < 8;k++) { int j; for(j = 0;j < i;j++) { if(k == newTry[j] || (i - j) == (newTry[j] - k) || (j - i) == (newTry[j] - k)) break; } if(j == i) { newTry[i] = k; getAllAns(i + 1); } } } int main() { getAllAns(0); int num; scanf("%d",&num); while(num--) { int n; scanf("%d",&n); for(int i = 0;i < 8;i++) printf("%d",ans[n - 1][i]); printf("\n"); } return 0; }