首页 > 学院 > 开发设计 > 正文

N皇后问题

2019-11-08 18:47:41
字体:
来源:转载
供稿:网友
/*  问题描述:输入一个正整数N,则程序输出N皇后问题的全部摆法。            输出结果里的每一行都代表一种摆法。行里的第i个数字            如果是n,就代表第i行的皇后应该放在第n列。皇后的行、列编号都是从1            开始计算 */#include <iostream>#include <cmath>using namespace std;int N;int queenPos[100];//用来存放算好的皇后位置,最左上角是(0,0);void  NQueen(int k)//求解函数{//在0~k-1行已经摆好的情况下,摆第k行及其以后的皇后    int i;    if( k==N)    {//N个皇后已经摆好        for( i=0 ;i<N;i++)            cout<< queenPos[i] + 1<< " ";        cout <<endl;        return ;    }    for(i=0 ; i<N ; i++)    {//逐个尝试第k个皇后的位置        int j;        for(j = 0 ;j< k; j++)        {//和已经摆好的k个皇后比较,看是否冲突            if(queenPos[j] == i||abs(queenPos[j] - i) == abs(k-j))            {//发生冲突,测试下一个位置                break;            }        }        if(j == k)        {//当前位置i和摆好的皇后不冲突            queenPos[k] = i;//将第k行的皇后摆在第i列并记录下来            NQueen(k+1);//递归,继续摆放第k+1行        }    }}int main(){    cin>>N;    NQueen(0);//从第零航开始摆皇后    return 0;}

运行结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表