返回信息流void backtrack(int i) {
int j;
if(i > N) {
showAnswer();
}
else {
for(j = 1; j <= N; j++) {
if(column[j] == 1 &&
rup[i+j] == 1 && lup[i-j+N] == 1) {
queen[i] = j;
column[j] = rup[i+j] = lup[i-j+N] = 0;
backtrack(i+1);
column[j] = rup[i+j] = lup[i-j+N] = 1;
}
}
}
}
唔。。。这是一个八皇后的程序。。。相信应该是最简单的算法了吧。。。我就是想问一句。。。column[j] = rup[i+j] = lup[i-j+N] = 1; 这句话在什么情况下会执行?还是说这句话是没用的。。。各位大神们求解。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #81228同步于 2014/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
小白又来叨扰各位学长学姐了。。。
Transformers
2014/8/3镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这个更简单一些。
def nqueens(n, l=None):
if l==None:
l = []
j = len(l)
if j == n:
yield l
else:
for q in range(n):
if n not in l and not any(abs(i-j)==abs(p-q) for (i,p) in enumerate(l)):
l.append(q)
yield from nqueens(n, l)
l.pop()
这个更简单。
【 在 Transformers 的大作中提到: 】
: void backtrack(int i) {
: int j;
: if(i > N) {
: ...................
暖羊羊换头像了[ema3]
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 这个更简单一些。
: [code=python]
: def nqueens(n, l=None):
: ...................
通过『我邮2.0』发布
唔。。。看起来大概意思能看懂但是还是有的语句不明白。。。哎。。。我还是想知道那个最后一行到底说的是什么意思。。。不管怎么说感谢大神写的代码了!小白在此感谢了!
【 在 nuanyangyang 的大作中提到: 】
: 这个更简单一些。
: [code=python]
: def nqueens(n, l=None):
: ...................
稍微编辑下代码,缩进,语法高亮什么的
【 在 Transformers 的大作中提到: 】
: void backtrack(int i) {
: int j;
: if(i > N) {
: ...................
在backtrack递归到底的时候,即i > N时。
调完showAnswer()后弹栈return,backtrack走完进入下一条语句。
【 在 Transformers 的大作中提到: 】
: void backtrack(int i) {
: int j;
: if(i > N) {
: ...................
return?什么意思?。。如果i>N的话那不就没办法进入if中的else那部分语句了么?。。没太懂你的意思。。。大神可以稍微说的详细点吗?要不要我把所有的语句贴上了?
【 在 tonyjansan 的大作中提到: 】
: 在backtrack递归到底的时候,即i > N时。
: 调完showAnswer()后弹栈return,backtrack走完进入下一条语句。
:
// 顺着注释前边的序号(1. 2. 3. 4.)看
void backtrack(int i)
{
int j;
if(i > N) // 2. 当i = N + 1时,不再递归
{
showAnswer(); // 3. 这个应该只是输出下结果,然后函数就返回了
}
else {
for(j = 1; j <= N; j++)
{
if(column[j] == 1 && rup[i+j] == 1 && lup[i-j+N] == 1)
{
queen[i] = j;
column[j] = rup[i+j] = lup[i-j+N] = 0;
backtrack(i + 1); // 1. 这里最终总会递归到i = N,此时递归调用的参数为N + 1( > N)
column[j] = rup[i+j] = lup[i-j+N] = 1; // 4. 就到这里了
}
}
}
}
【 在 Transformers 的大作中提到: 】
: return?什么意思?。。如果i>N的话那不就没办法进入if中的else那部分语句了么?。。没太懂你的意思。。。大神可以稍微说的详细点吗?要不要我把所有的语句贴上了?
啊啊啊啊。。。大神啊。。。被你这么一说我一下子就懂了!!!十分感谢!!!哎。。。我还是太弱。。。浪费了你这么多时间。。。真不好意思啊。。。
【 在 tonyjansan 的大作中提到: 】
: [code=c]
: // 顺着注释前边的序号(1. 2. 3. 4.)看
: void backtrack(int i)
: ...................