八皇后问题

八皇后问题题解
这应该是典型的递归问题,当然也涉及枚举问题,回溯法;
首先对第一个皇后进行排序,第一列有8个位置供她选择,然后将其所在的行和两千对角线分别进行标记三个数
组中,在进行第n个皇后进行排序有八个位置供她选择,但要检验其所在行和对角线上是否已被其他皇后占领。
还有是一定要搞明白出栈问题,在出战后要对标志进行变回原值。

输出是运用的小技巧很赞奥

 1 #include<stdio.h>
 2 int a[16]={0},b[16]={0},c[16]={0};
 3 int q[8];
 4 int num=0;
 5 void puts(int n)
 6 {
 7     int i,t;
 8     printf("No. %d\n",n);
 9     for(i=0;i<8;i++)
10         {for(t=0;t<8;t++)
11     {
12         if(t==q[i])printf("Q ");
13         else printf("* ");
14     }
15         printf("\n");
16         }
17 }
18 void queen(int cur)
19 {
20     int i,t;
21     if(cur==8){
22         num++;
23         puts(num);
24     }
25     else
26     for(i=0;i<8;i++){
27         if(a[i]==0&&b[i+cur]==0&&c[cur-i+8]==0)
28     {
29         q[cur]=i;
30         a[i]=1;b[i+cur]=1;c[cur-i+8]=1;
31         queen(cur+1);
32         a[i]=0;b[i+cur]=0;c[cur-i+8]=0;
33     }}
34 }
35 int main()
36 {
37     int t=0;
38     queen(t);
39     printf("%d",num);
40     return 0;
41 }

 

转载于:https://www.cnblogs.com/dongq/p/4151773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值