zoukankan      html  css  js  c++  java
  • n皇后问题

    问题:n皇后问题:输入整数n,要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。输出结果里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该摆放在第n列。皇后的行、列编号都是从1开始算。

    样例输入:

    4

    样例输出:

    2 4 1 3

    3 1 4 2

    代码:

    #include "stdafx.h"
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    int N;
    int queenPos[100];
    
    //在0到k-1行皇后已经摆好的情况下,摆第k行及其后面的皇后
    void NQueen(int 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++)
        {
            int j;
            for(j = 0;j<k;j++)
            {
                //和已经摆好的k个皇后的位置比较,看是否冲突
                if(queenPos[j]==i || abs(queenPos[j]-i)==abs(k-j))
                {
                    break;
                }
            }
            if(j==k)
            {
                queenPos[k] = i;//将第k个皇后摆放在位置i
                NQueen(k+1);
            }
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        cin>>N;
        NQueen(0);
        return 0;
    }
  • 相关阅读:
    正则表达式
    UVALive
    Python科学计算基础篇
    IntelliJ IDEA 2017.3激活与汉化
    hive order by,sort by, distribute by, cluster by作用以及用法
    Hive调优
    Hive 索引
    hive视图
    Hive 分区 分桶使用
    linux内核优化,内核参数详解
  • 原文地址:https://www.cnblogs.com/guwei4037/p/8064288.html
Copyright © 2011-2022 走看看