#include "stdio.h" #include "math.h" /////////////////////////////////Check函数功能:检验第n行的皇后是否和之前的皇后有冲突,没有的话返回1 int Check(int a[],int n) { for(int i=1;i<n;i++) { if(abs(a[i]-a[n])==abs(i-n) || a[i]==a[n])//////////////见下面注释 return 0; } return 1; } int a[20],n,i,t=1;////////////////////////////////////////全局变量 void Try(int i) { int j,k; for(j=1;j<=n;j++) { a[i]=j; if(Check(a,i))///////////////////////////////////////如果第j列不会与之前的皇后冲突 { if(i<n)//////////////////////////////////////////如果i<n,即还没有找到八个皇后,继续递归 Try(i+1); else ////////////////////////////////////////////如果找到了一组解就输出 { printf("第%d种解法:\n",t++); for(k=1;k<=n;k++) printf("第%d个皇后:%d\n",k,a[k]); printf("\n\n"); } } } } int main() { printf("几皇后?n="); scanf("%d",&n); Try(1); return 0; }
原文:https://www.cnblogs.com/hongdoudou/p/13121414.html