八皇后算法


暴力求解->


用数组实现八皇后的回溯,,,,


--------------------------------------------------------------------------------------------------------------------


void search(int cur)
{
/* if(cur==n) tot++;      //以经成功的找到了一条路
else for(int i=0;i<n; i++){
if(!vis[0][i]&&!vis[1][cur+i] && !vis[2][cur-i+n]){


C[cur]=i;       //放置皇后
vis[0][i]=vis[1][cur+i] =vis[2][cur-i+n]=1;      
search(cur+1);//递归试探下一位皇后
vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;
}
}     */


if(cur==n) tot++;
else for(int i=0;i<n;i++){
int ok=1;
C[cur]=1;
for(int j=0;j<cur;j++)
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);  //成立找下一位皇后位置
}


}




-----------------------------------------------------------------------------------------------------------------------------------------------------------



void search(int cur)
{
    int i,j;
    //cur代表该放置第cur个皇后;
    if(cur==n) {tot++;for(i=0;i<n;i++) printf("%d  ",c[i]);printf("\n");}
    else
    {
        for(i=0;i<n;i++)
        {
            int ok=1;
            c[cur]=i;//先放置皇后,再判断是否合法;
            for(j=0;j<cur;j++)
                if(c[cur]==c[j] || cur-c[cur]==j-c[j] || cur+c[cur]==j+c[j])//判断放置第i个皇后之后是否合法。
                {ok=0;break;}
            if(ok) search(cur+1);
        }
    }
}



请输入一个数字,表示需要放置多少个皇后:
8
0  4  7  5  2  6  1  3
0  5  7  2  6  3  1  4
0  6  3  5  7  1  4  2
0  6  4  7  1  3  5  2
1  3  5  7  2  0  6  4
1  4  6  0  2  7  5  3
1  4  6  3  0  7  5  2
1  5  0  6  3  7  2  4
1  5  7  2  0  3  6  4
1  6  2  5  7  4  0  3
1  6  4  7  0  3  5  2
1  7  5  0  2  4  6  3
2  0  6  4  7  1  3  5
2  4  1  7  0  6  3  5
2  4  1  7  5  3  6  0
2  4  6  0  3  1  7  5
2  4  7  3  0  6  1  5
2  5  1  4  7  0  6  3
2  5  1  6  0  3  7  4
2  5  1  6  4  0  7  3
2  5  3  0  7  4  6  1
2  5  3  1  7  4  6  0
2  5  7  0  3  6  4  1
2  5  7  0  4  6  1  3
2  5  7  1  3  0  6  4
2  6  1  7  4  0  3  5
2  6  1  7  5  3  0  4
2  7  3  6  0  5  1  4
3  0  4  7  1  6  2  5
3  0  4  7  5  2  6  1
3  1  4  7  5  0  2  6
3  1  6  2  5  7  0  4
3  1  6  2  5  7  4  0
3  1  6  4  0  7  5  2
3  1  7  4  6  0  2  5
3  1  7  5  0  2  4  6
3  5  0  4  1  7  2  6
3  5  7  1  6  0  2  4
3  5  7  2  0  6  4  1
3  6  0  7  4  1  5  2
3  6  2  7  1  4  0  5
3  6  4  1  5  0  2  7
3  6  4  2  0  5  7  1
3  7  0  2  5  1  6  4
3  7  0  4  6  1  5  2
3  7  4  2  0  6  1  5
4  0  3  5  7  1  6  2
4  0  7  3  1  6  2  5
4  0  7  5  2  6  1  3
4  1  3  5  7  2  0  6
4  1  3  6  2  7  5  0
4  1  5  0  6  3  7  2
4  1  7  0  3  6  2  5
4  2  0  5  7  1  3  6
4  2  0  6  1  7  5  3
4  2  7  3  6  0  5  1
4  6  0  2  7  5  3  1
4  6  0  3  1  7  5  2
4  6  1  3  7  0  2  5
4  6  1  5  2  0  3  7
4  6  1  5  2  0  7  3
4  6  3  0  2  7  5  1
4  7  3  0  2  5  1  6
4  7  3  0  6  1  5  2
5  0  4  1  7  2  6  3
5  1  6  0  2  4  7  3
5  1  6  0  3  7  4  2
5  2  0  6  4  7  1  3
5  2  0  7  3  1  6  4
5  2  0  7  4  1  3  6
5  2  4  6  0  3  1  7
5  2  4  7  0  3  1  6
5  2  6  1  3  7  0  4
5  2  6  1  7  4  0  3
5  2  6  3  0  7  1  4
5  3  0  4  7  1  6  2
5  3  1  7  4  6  0  2
5  3  6  0  2  4  1  7
5  3  6  0  7  1  4  2
5  7  1  3  0  6  4  2
6  0  2  7  5  3  1  4
6  1  3  0  7  4  2  5
6  1  5  2  0  3  7  4
6  2  0  5  7  4  1  3
6  2  7  1  4  0  5  3
6  3  1  4  7  0  2  5
6  3  1  7  5  0  2  4
6  4  2  0  5  7  1  3
7  1  3  0  6  4  2  5
7  1  4  2  0  6  3  5
7  2  0  5  1  4  6  3
7  3  0  2  5  1  6  4
放置8个皇后一共有92种方法。


______________________________________________
 7 7 7 7 7 7 7 7
______________________________________________
Press any key to continue




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值