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

      n后问题,解决思路:假设每个皇后占一行(且第i个皇后放在第i - 1 行),依次去尝试下一个皇后该放在该行的哪一列

    #include<iostream>
    #include<cmath>
    using namespace std ;
    class queen
    {
           public :
          
                 queen (){};
                 //queen(int row = -1, int col = -1) : m_row(row), m_col(col) {}
                
                 void setRow( int row) { m_row = row ; }
                 void setCol( int col) { m_col = col ; }
                
                 int getCol() const {return m_col ; }
                 int getRow() const {return m_row ; }
                
           private :
          
                 int m_row;
                 int m_col;
    };
    
    // curr : 当前的皇后序号(第几个皇后),该值也表明该皇后在第几行
    void Queue( queen * nq , int curr , int *sum , int n )
    {
           if ( curr == n )
          {
                 for (int i = 0 ; i < n ; i ++)
                {
                       cout << nq [i ]. getCol()<< " " ;
                }
                 cout <<endl ;
                (* sum )++;
                
                 return ;
          }
           int i, j;
           for ( i = 0 ; i < n; i++) //  i 表示所有列,依次尝试放在每一列
           {
                 for ( j = 0 ; j < curr; j++) // j 代表已经放下的皇后
                 {
                       //if( abs(nq[j].getCol() - nq[i].getCol()) == abs(nq[j].getRow() - nq[i].getRow()) || nq[i].getCol() == nq[j].getCol())
                       if ( abs (nq [j ]. getCol() - i) == abs (nq [j ].getRow () - curr ) || nq [j ].getCol () == i)
                             break ;
                }
                 if ( j == curr ) // 可以放下,和前 curr - 1 个皇后都不冲突
                {
                       nq[ curr ].setCol (i );
                       Queue (nq , curr + 1 , sum , n );
                }
          }
    }
    
    int nqueenP( int n)
    {
           queen * nq = new queen [n ];
          
    
           for (int i = 0 ; i < n ; i ++)
          {
                 nq[ i]. setRow (i );
                 nq[ i]. setCol (0 );
          }
          
           int sum = 0 ;
          
           Queue (nq ,0 ,&sum ,n );
          
           return sum ;
    }
    
    
    int main()
    {
           cout <<"8 Queue Result: " << nqueenP( 8 )<<endl ;
    }
    

      

  • 相关阅读:
    Spark完成wordCount
    Spark介绍
    分库分表介绍
    rpc学习
    xgboost应用
    ElasticSearch 批量增加索引
    乡愁
    java futureTask的使用
    ElasticSearch 例子
    Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
  • 原文地址:https://www.cnblogs.com/zhuyp1015/p/4017999.html
Copyright © 2011-2022 走看看