leetcode: N-Queues

来源:互联网 发布:超图软件 新浪财经 编辑:程序博客网 时间:2024/04/30 01:10
N-Queens

The n-queens puzzle is the problem of placing n queens on ann×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.."]]


解法:
典型的深搜算法,直接上代码:
#include <iostream>#include<vector>#include <string>using namespace std;//C(N,0)表示第i行皇后所在的列数void DFS(vector<int> C, vector<vector<string>> &result, int row){int flag=0; //与前面的皇后所在的列有没有冲突int N=C.size();if (row == N){//输出结果vector<string> solution;for (int i=0;i<N;i++){string s(N,'.');for (int j=0;j<N;j++){if (j == C[i]){s[j]='Q';}}solution.push_back(s);}result.push_back(solution);return;}for (int j=0;j<N;j++)  //逐列尝试{flag=0;for(int i=0;i<row;i++){if (j==C[i] || abs(j-C[i]) == abs(i-row)){flag=1;   // 有冲突break;}}if (!flag){C[row]=j;DFS(C, result, row+1);}}}int main(){int N=8;vector<int> C(N,0);vector<vector<string>> result;DFS(C, result, 0);return 0;}









0 0
原创粉丝点击