首页 > 代码库 > N皇后问题

N皇后问题

#include <iostream>
#include <cmath>
using namespace std;
int queenpos[100];//设置数组存放每一行皇后的位置,下标是行数-1,值是列数
int n;//n皇后问题
void queen(int k)//皇后N问题
{
    if(k==n)
    {
    for(int i=0;i<n;i++)//条件满足,循坏输出
        cout<<queenpos[i]+1<<" ";
    cout<<endl;
    return;//一定要有return;
    }
    for(int i=0;i<n;i++)
    {
    int j;
    for(j=0;j<k;j++)
    {
        if(queenpos[j]==i||abs(queenpos[j]-i)==abs(k-j))//it is the most important step;
            break;//判断行数不同,列数一定不同,K就是,abs(queenpos[j]-i)==abs(k-j)用来判断对角线
    }
    if(j==k)
    {
        queenpos[k]=i;
        queen(k+1);//递归调用、、
    }
    }
}
int main()
{
    cin>>n;
    queen(0);
    return 0;
}

  

N皇后问题