c***g 发帖数: 472 | 1 可以算出部分结果来,但是到了后来,似乎死循环了,不能正常的结束
请问谁帮我看看,哪儿有个bug
/*
check whether [level, position] is OK
output stored the valid position so far between [0,level-1];
*/
bool check(int output[], int level, int position){
bool isOK = true;
for(int i = 0; i < level; i++) {
if( position == output[i]
|| i - output[i] == level - position
|| output[i] - i == position - level
|| i + output[i] == level + position) {
isOK = false;
break;
}
}
return isOK;
}
/*
try the next level
*/
void tryNext(int output[], int level) {
int NUM = 8;
if(level == NUM) {
dumpInt(output, NUM);
return;
}
for(int i = 0;i < NUM; i++) {
if(check(output, level, i)){
output[level] = i;
tryNext(output, level+1);
} else
continue;
}
return ;
}
void solveEightQueen(){
int output[0];
int visited[8][8];
for(int i = 0; i < 8; i++)
output[i] = 0;
tryNext(output, 0);
} | l*****a 发帖数: 14598 | 2 why so many conditions?
不是 abs(i-level)==abs(output[i]-position)|| output[i]==position
就可以了吗?
【在 c***g 的大作中提到】 : 可以算出部分结果来,但是到了后来,似乎死循环了,不能正常的结束 : 请问谁帮我看看,哪儿有个bug : /* : check whether [level, position] is OK : output stored the valid position so far between [0,level-1]; : */ : bool check(int output[], int level, int position){ : : bool isOK = true; :
| c***g 发帖数: 472 | 3 不对吧,如果你在 [1,5], 只能是[0,4],[2,6] 和 [3,7]
不能是[4,0] [5,1] [6,2] [7,3], 这几个点虽然是abs(i-level)==abs(output[i]-
position), 但是其实还是可以放的
【在 l*****a 的大作中提到】 : why so many conditions? : 不是 abs(i-level)==abs(output[i]-position)|| output[i]==position : 就可以了吗?
| l*****a 发帖数: 14598 | 4 你举的例子满足我的条件?
[1,5] [5,1]不在对角线上?
【在 c***g 的大作中提到】 : 不对吧,如果你在 [1,5], 只能是[0,4],[2,6] 和 [3,7] : 不能是[4,0] [5,1] [6,2] [7,3], 这几个点虽然是abs(i-level)==abs(output[i]- : position), 但是其实还是可以放的
| c***g 发帖数: 472 | 5 你说的是对的,谢谢你的指正,
但是,似乎不是bug所在啊
【在 l*****a 的大作中提到】 : 你举的例子满足我的条件? : [1,5] [5,1]不在对角线上?
| l*****a 发帖数: 14598 | 6 自己打几行log
看看程序在干什么呢
【在 c***g 的大作中提到】 : 你说的是对的,谢谢你的指正, : 但是,似乎不是bug所在啊
| f*****i 发帖数: 835 | | c***g 发帖数: 472 | 8 this is a typo. but the problem is gone.
Thanks!
But would you tell me why?
【在 f*****i 的大作中提到】 : int output[0]; ??
| l**********1 发帖数: 415 | 9 here
output[level] = i;
tryNext(output, level+1);
should be
output[level] = i;
tryNext(output, level+1);
output[level] = -1; //remove the newly placed queen | c***g 发帖数: 472 | 10 这个有影响么?
【在 l**********1 的大作中提到】 : here : output[level] = i; : tryNext(output, level+1); : should be : output[level] = i; : tryNext(output, level+1); : output[level] = -1; //remove the newly placed queen
| B*******1 发帖数: 2454 | 11 应该没有影响。
【在 c***g 的大作中提到】 : 这个有影响么?
| f*****i 发帖数: 835 | 12 My understanding is since you define as output[0],you didn't really 'reserve
' any memory. It's possible other part of the program using the same memory
and always set it to some value. So you get into a infinity loop.
【在 c***g 的大作中提到】 : this is a typo. but the problem is gone. : Thanks! : But would you tell me why?
|
|