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

    描述

     

    在n×n 格的棋盘上放置彼此不受攻击的n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2 个皇后不放在同一行或同一列或同一斜线上。设计一个解n 后问题的队列式分支限界法,计算在n´ n个方格上放置彼此不受攻击的n个皇后的一个放置方案。

    输入

     

    第一行有1 个正整数n。

    输出

     

    将计算出的彼此不受攻击的n个皇后的一个放置方案输出。第1行是n个皇后的放置方案。

    样例输入

    5

    样例输出

    1 3 5 2 4

    #include<iostream>
    using namespace std;
    bool place(int k,int i,int*x)
    {
        for(int j=0;j<k;j++)
            if((x[j]==i)||(abs(x[j]-i)==abs(j-k)))
                return false;
        return true;
    }
    void nqueens(int k,int n,int *x)
    {
        for(int i=0;i<n;i++)
        {
            if(place(k,i,x))
            {
                x[k]=i;
                if(k==n-1)
                {                 
                    for(int i=0;i<n;i++)                   
                        cout<<x[i]+1<<" ";
                    cout<<endl;
                    exit(0);
                }        
                else nqueens(k+1,n,x);
            }
        }
    }
    int main()
    {
        int n,*x;
        cin>>n;
        x=(int*)malloc(n*sizeof(int));
        nqueens(0,n,x);
        return 0;
    }
    

      

  • 相关阅读:
    实验一
    BZOJ 2564
    P4557 [JSOI2018]战争
    移动自动化-Mac-IOS-appium环境搭建
    Node安装mac版本
    删除N天前文件和空文件
    Python之jsonpath模块
    性能学习
    参数化
    查找测试用例
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3437038.html
Copyright © 2011-2022 走看看