八皇后问题

来源:互联网 发布:京东全球购 关税 知乎 编辑:程序博客网 时间:2024/06/07 01:28
#include <stdio.h>int C[20];//下标表示行,其值表示列int n, cnt;//皇后个数, 排放方法种数void search(int cur){int i, j, ok;if (cur == n)//搜索到第n行时表明前n-1行都排放好了{for (i=0; i<n; i++){//打印摆放图for (j=0; j<n; j++){if (j == C[i])printf("%2d", 1);elseprintf("%2d", 0);}printf("\n");}printf("\n");cnt++;}else for (i=0; i<n; i++){//第cur行,有n列,即有n种选择C[cur] = i;ok = 1;for (j=0; j<cur; j++){//检查第cur行摆放的皇后是否与前cur-1行的冲突if (C[cur] == C[j] || cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]){//因为行数不会冲突,只检查列、主副对角线可以ok = 0;break;}}if (ok)search(cur+1);}}int main(){while (scanf("%d", &n) != EOF){cnt = 0;search(0);//从0行开始搜索printf("共有%d种摆放方法\n", cnt);}return 0;}