满意答案
sungminct
2013.11.14
采纳率:41% 等级:13
已帮助:5892人
用栈,以及回溯法来做
#include
#include
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;
00分享举报