leetcode N-Queens I && N-Queens II

第一个的代码:

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 bool isLegal(int i, int j, vector<string> &current)
 7 {
 8     int size = current.size();
 9     int x = i-1, y = j;
10     while (x >= 0)
11     {
12         if (current[x][y] == 'Q')
13             return false;
14         x--;
15     }
16     x = i-1;
17     y = j - 1;
18     while (x >= 0 && y >= 0)
19     {
20         if (current[x][y] == 'Q')
21             return false;
22         x--;
23         y--;
24     }
25     x = i - 1;
26     y = j + 1;
27     while (x >= 0 && y < size)
28     {
29         if (current[x][y] == 'Q')
30             return false;
31         x--;
32         y++;
33     }
34     return true;
35 }
36 
37 void getResult(int row, int index, vector<vector<string>> &result, vector<string> &current, int size)
38 {
39     if (row == size)
40         result.push_back(current);
41     else
42     {
43         while (index < size)
44         {
45             current[row][index] = 'Q';
46             if (isLegal(row, index, current))
47                 getResult(row + 1, 0, result, current, size);
48             current[row][index] = '.';
49             index++;
50         }
51     }
52 }
53 
54 vector<vector<string>> solveNQueens(int n) 
55 {
56     vector<vector<string>> result;
57     string s = "";
58     for (int i = 0; i < n; i++)
59         s.push_back('.');
60     vector<string> current(n, s);
61     getResult(0, 0, result, current, n);
62     return result;
63 }
64 
65 int main()
66 {
67     vector<vector<string>> result = solveNQueens(4);
68     for (int i = 0; i < result.size(); i++)
69     {
70         for (int j = 0; j < result[i].size(); j++)
71             cout << result[i][j].c_str() << endl;
72         cout << "-_________________________________________-" << endl;
73     }
74     return 0;
75 }

第二个的代码:
得,忘了保存了,算了,不贴了,这题也就做到这份上了,讨论区里那个用位的我真是佩服死你啦。。。。。!!!!!!!!!

原文地址:https://www.cnblogs.com/chaiwentao/p/4614423.html