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

52. N-Queens II

2017-02-02 01:29 309 查看
1刷

没啥好说的。看回51吧,一个样

class Solution {
public:
vector<string>ntemp;
vector<vector<int> >visit;
vector<vector<string> >outcome;
int temp = 0;

void changevisit0(int a, int b, int n){
for(int i = 0; i < n; ++ i){
visit[a][i] --;
visit[i][b] --;
}
visit[a][b]++;
for(int i = 1; a + i < n && b + i < n; ++ i)
visit[a + i][b + i] --;
for(int i = 1; a - i >= 0 && b - i >= 0; ++i)
visit[a - i][b - i] --;
for(int i = 1; a - i >= 0 && b + i < n; ++ i)
visit[a - i][b + i] --;
for(int i = 1; a + i < n && b - i >= 0; ++ i)
visit[a + i][b - i] --;
}

void changevisit1(int a, int b, int n){
for(int i = 0; i < n; ++ i){
visit[a][i] ++;
visit[i][b] ++;
}
visit[a][b]--;
for(int i = 1; a + i < n && b + i < n; ++ i)
visit[a + i][b + i] ++;
for(int i = 1; a - i >= 0 && b - i >= 0; ++i)
visit[a - i][b - i] ++;
for(int i = 1; a - i >= 0 && b + i < n; ++ i)
visit[a - i][b + i] ++;
for(int i = 1; a + i < n && b - i >= 0; ++ i)
visit[a + i][b - i] ++;
}

void dfs(int a, int b, int n, int num){
if(a == n)
return ;

ntemp[a][b] = 'Q';
changevisit1(a, b, n);
if(num + 1 == n){
//outcome.push_back(ntemp);
temp++;
}
else
for(int i = 0; i < n; ++ i)
if(visit[a + 1][i] == 0)
dfs(a + 1, i, n, num + 1);
ntemp[a][b] = '.';
changevisit0(a, b, n);
return ;
}

int totalNQueens(int n) {
string s = "";
for(int i = 0; i < n; ++ i)
s += ".";
for(int i = 0; i < n; ++ i)
ntemp.push_back(s);
vector<int>u;
for(int i = 0; i < n; ++ i)
u.push_back(0);
for(int i = 0; i < n; ++ i)
visit.push_back(u);
for(int i = 0; i < n; ++ i){
dfs(0, i, n, 0);
for(int j = 0; j < n; ++ j)
for(int k = 0; k < n; ++ k){
visit[j][k] = 0;
ntemp[j][k] = '.';
}
}
return temp;
}
};


2刷

class Solution {
public:
void solve(int& sum, vector<string>& vec, vector<int>& flag, int row, int n){
if(row == n){
sum++;
return ;
}

for(int i = 0; i < n; ++i)
if(flag[i] && flag[n + row + i] && flag[4 * n - 2 + i - row]){
flag[i] = flag[n + row + i] = flag[4 * n - 2 + i - row] = 0;
vec[row][i] = 'Q';
solve(sum, vec, flag, row + 1, n);
vec[row][i] = '.';
flag[i] = flag[n + row + i] = flag[4 * n - 2 + i - row] = 1;
}
}
int totalNQueens(int n) {
int sum = 0;
vector<string>vec(n, string(n, '.'));
vector<int>flag(5 * n - 2, 1);
solve(sum, vec, flag, 0, n);
return sum;
}
}; class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxx = INT_MIN;
int sum = 0;
for(int i = 0; i < nums.size(); ++ i){
sum += nums[i];
if(sum > maxx) maxx = sum;
if(sum < 0) sum = 0;
}
return maxx;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: