您的位置:首页 > 产品设计 > UI/UE

[Leetcode 52, Hard] N Queens II

2015-07-21 02:29 453 查看
Problem:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.



Analysis:

Solutions:

C++:

bool IsSafeLean(int row, int col, vector<int> seizedColumns, int row_bound)  
    {  
        for(int i = 1; row - i >= 0 && col + i < row_bound; ++i) {  
            if(seizedColumns[row - i] == col + i)  
            return false;  
        }  
  
        for(int i = 1; row - i >= 0 && col - i >= 0; ++i) {  
            if(seizedColumns[row - i] == col - i)  
            return false;  
        }  
  
        return true;  
    }  
  
    void FindPlacements(vector<int> seizedColumns, int row, int row_bound, vector<vector<string> >& sols) 
    {  
        if(row == row_bound) {  
            vector<string> placement;  
            for(int i = 0; i < seizedColumns.size(); ++i) {  
                string row = "";  
                for(int j = 0; j < row_bound; ++j) {  
                    if(j == seizedColumns[i])  
                        row.push_back('Q');  
                    else  
                        row.push_back('.');  
                }  
                placement.push_back(row);  
            }  
            sols.push_back(placement);  
        } else {  
            for(int col = 0; col < row_bound; ++col) {  
                if(!seizedColumns.empty()) {  
                    int index = 0;  
                    for(; index < seizedColumns.size(); ++index) {  
                        if(col == seizedColumns[index])  
                        break;  
                    }  
  
                    if(index < seizedColumns.size() || (index == seizedColumns.size() && !IsSafeLean(row, col, seizedColumns, row_bound)))  
                        continue;  
                }  
  
                seizedColumns.push_back(col);  
                FindPlacements(seizedColumns, row + 1, row_bound, sols);  
                seizedColumns.erase(seizedColumns.end() - 1);  
            }  
        }  
    }  
  
    int totalNQueens(int n) {
        vector<vector<string> > sols;  
        vector<int> seizedColumns;  
  
        FindPlacements(seizedColumns, 0, n, sols);  
  
        return sols.size();
    }
Java:

Python:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: