C语言中关于4皇后或8皇后问题!

来源:百度知道 编辑:UC知道 时间:2024/06/12 01:47:38
个人认为可用4个或8个for循环求解出,是否有更有效的方法求解?!!
我看书上写的是用栈,但是没看到来咋回事儿。我也想的是用边for边修枝,相当于树形结构,但是就是没想明白,栈到底怎么用的!!麻烦指点下~~

用栈,以及回溯法来做
#include<stdio.h>
#include<math.h>

int place(int b);
int a[10]; //定义栈来记录皇后位置

int main(void)
{
int n; //输入
int k; //第k个皇后
int j; //输出结果用
scanf("%d",&n);
a[1]=0;
k=1; //第一个皇后开始

while(k>0)
{
a[k]=a[k]+1; //第一次是从1开始,以后是退回前一个皇后时这个皇后的位置向后挪一位

while(a[k]<=n&&!place(k)) // 位置合法?
a[k]=a[k]+1; //不合法再向后挪一位
if(a[k]<=n) //位置没有超过合法位置
{
if(k==n) //全部皇后安放完
{
for(j=1;j<=n;j++)// 输出位置
printf("%3d",a[j]);
printf("\n");
}
else //还有皇后没有放
{
k++; //继续放下一个皇后
a[k]=0; //初始化位置
}
}
else //位置不合法
k--; //退回去,回溯
}

return 0;

回溯法+修枝