8皇后问题,任何一本数据结构及网上教程都可以找到完整的程序而N皇后问题相对就复杂些了,以下是我OJ可的程序参考#include <iostream>#include <cstdio>using namespace std;int n;int x[1001];long sum,out;void OutPut(void){ int i, j; if (sum!=1) printf("\n"); for(i = 1; i <= n; i++) { printf("%2d",n-i+1); for(j = 1; j <= n; j++) if(x[i] == j) printf(" Q"); else printf(" "); printf("\n"); } printf(" a"); for(i=1;i<n;i++) printf("%2c",'a'+i); printf("\n"); // printf(" a b c d\n");}int Place(int k){ int j; for(j = 1; j < k; j++) if((abs(k - j) == abs(x[j] - x[k])) || (x[j] == x[k])) return 0; return 1;}void BackTrack(int t){ int i; if(t > n) { sum++; OutPut(); } else for(i = 1; i <= n; i++) { x[t] = i; if(Place(t)) BackTrack(t + 1); }}int main(){ int i; scanf("%d", &n); sum = out=0; for(i = 0; i <= n; i++) x[i] = 0; BackTrack(1); return 0;}测试结果而第一个问题,可以在第二个做简单修改