码迷,mamicode.com
首页 > 其他好文 > 详细

N皇后问题

时间:2017-04-08 22:44:22      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:step   i++   break   clu   std   ==   ret   递归   int   

#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皇后问题

标签:step   i++   break   clu   std   ==   ret   递归   int   

原文地址:http://www.cnblogs.com/masterchd/p/6683108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!