• 【leetcode】N-Queens


    N-Queens

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

    Given an integer n, return all distinct solutions to the n-queens puzzle.

    Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.

    For example,
    There exist two distinct solutions to the 4-queens puzzle:

    [
     [".Q..",  // Solution 1
      "...Q",
      "Q...",
      "..Q."],
    
     ["..Q.",  // Solution 2
      "Q...",
      "...Q",
      ".Q.."]
    ]
     
     
    采用q[i]表示第i行的Queen放置的位置
    不合法的条件:q[i]==q[level]||abs(q[level]-q[i])==abs(level-i)
     
     1 class Solution {
     2 public:
     3     vector<vector<string> > solveNQueens(int n) {
     4        
     5         vector<int> q(n,-1);
     6         vector<vector<string> > result;
     7         getQueens(0,n,result,q);
     8         return result;
     9     }
    10    
    11     void PrintQueens(vector<int> &q,vector<vector<string> > &result)
    12     {
    13         int n=q.size();
    14         vector<string> tmp;
    15         string str;
    16         for(int i=0;i<n;i++)
    17         {
    18             str="";
    19             for(int j=0;j<n;j++)
    20             {
    21                 if(q[i]==j)str+='Q';
    22                 else str+='.';
    23             }
    24             tmp.push_back(str);
    25         }
    26        
    27         result.push_back(tmp);
    28     }
    29    
    30     void getQueens(int level,int &n,vector<vector<string> > &result,vector<int> &q)
    31     {
    32         if(level==n)
    33         {
    34             PrintQueens(q,result);
    35             return;
    36         }
    37         bool flag=false;
    38         for(int i=0;i<n;i++)
    39         {
    40             q[level]=i;
    41             if(isValid(q,level))
    42             {
    43                 getQueens(level+1,n,result,q);
    44             }
    45             q[level]=-1;
    46         }
    47     }  
    48    
    49     bool isValid(vector<int> &q,int &level)
    50     {
    51  
    52         for(int i=0;i<level;i++)
    53         {
    54             if(q[i]==q[level]||abs(q[level]-q[i])==abs(level-i)) return false;
    55         }
    56        
    57         return true;
    58     }
    59 };
     
  • 相关阅读:
    LeetCode(75) Sort Colors
    大众点评2015 在线笔试(1)
    百度2015 在线笔试题(3)
    百度2015 在线笔试题(2)
    百度2015 在线笔试题(1)
    其他 之网站分享插件
    Flask框架 之request对象
    Flask框架 之路由
    Flask框架 之第一个Flask程序
    微信 之网页授权登录
  • 原文地址:https://www.cnblogs.com/reachteam/p/4213979.html
Copyright © 2020-2023  润新知