Redian新闻
>
写了一个Queens的backtrack 大牛帮我看看
avatar
写了一个Queens的backtrack 大牛帮我看看# JobHunting - 待字闺中
C*U
1
如果用的是vector而不是数组的话 无法通过online judge large
哪里可以再优化一下啊?
谢谢了
int placeQueens(int n) {
int count = 0;
int *positions = new int[n];
int p = 0;
positions[p] = 0;
int i = 0;
while(!(p == -1 && i == n)) {
bool flag = true;
while(flag && i < n) {
int j = 0;
while(j < p + 1) {
if(positions[j] == i || positions[j] - i == j - (p + 1)||
positions[j] - i == p + 1 - j) {
break;
}
else {
j++;
}
}
if(j == p + 1) {
flag = false;
}
else {
i++;
}
}
if(i == n) {
if(p > -1 && positions[p] == n - 1) {
p--;
}
else if(p == -1) {
break;
}
else {
i = positions[p--] + 1; }
}
else {
positions[++p] = i;
i = 0 ;
}
if(p + 1 == n) {
count++;
i = positions[p] + 1;
p--;
}
}
return count;
}
avatar
l*i
2
You passed large n=12 by using the backtracking code above?
avatar
C*U
3
yes. you can try it.
but not perfect.
used 900 millisecond

【在 l***i 的大作中提到】
: You passed large n=12 by using the backtracking code above?
avatar
c*9
4
刚刚写的,不知道算是DP还是recursive,基本上是brute force
bool checkpos(vector& cur, int pos)
{
for(int i=0;i {
for(int j=0;j{
if(cur[i][j] =='Q')
{
if(j==pos)
{
return false;
}
else if(i+j == pos + cur.size())
{
return false;
}
else if(i-j == cur.size()-pos)
{
return false;
}
}
}
}
return true;

}
void help(vector >& result, int currentnum, vector<
string>& current,int n)
{
if(currentnum == n)
{
result.push_back(current);
}
string s = "";
for(int i=0;i{
s+=".";
}
for(int i=0;i{
if(checkpos(current,i))
{
s[i] = 'Q';
current.push_back(s);
s[i] = '.';
help(result,currentnum+1,current,n);
current.pop_back();
}
}
}
vector > solveNQueens(int n) {
vector > result;
vector current;
help(result,0,current,n);
return result;
}
avatar
b*x
5
为什么不算perfect?

【在 C***U 的大作中提到】
: yes. you can try it.
: but not perfect.
: used 900 millisecond

avatar
C*U
6
900 milliseconds
那个judge large总共也没几个例子
我不知道算不算慢

【在 b*****x 的大作中提到】
: 为什么不算perfect?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。