N皇后问题(c++)

N皇后问题(c++)

#include<iostream>
#include<cmath>
using namespace std;

int queenPos[10];//保存搜索结果,每一行对应的列标,这里行列的标号均从0开始
int count=0;//计数

void NQueen(int n,int N);//搜索第n行

int main()
{
    int N;
    cin>>N;
    NQueen(0,N);
    cout<<count;
    return 0;
}

void NQueen(int n,int N)
{
    if(n==N)//执行完毕,输出结果
    {
       count++;
       if(count<=3)
       {
         for(int i=0;i<N;i++)//打印输出
         {
            cout<<queenPos[i]+1<<"  ";
         }
         cout<<endl;
       }        
    return;
    }
    for(int i=0;i<N;i++)//一列一列尝试
    {
        int j;
        for(j=0;j<n;j++)//保证前n+1行不会发生冲突
        {          
          if(queenPos[j]==i||abs(queenPos[j]-i)==abs(n-j))//列相同,或者形成对角
            break;
        }
        if(j==n)//没有发生冲突
        {
            queenPos[n]=i;
            NQueen(n+1,N);//递归搜索下一行
        }
    }
}

祝学习愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值