BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #81228同步于 2014/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

小白又来叨扰各位学长学姐了。。。

Transformers
2014/8/3镜像同步9 回复
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; 这句话在什么情况下会执行?还是说这句话是没用的。。。各位大神们求解。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2014/8/3
这个更简单一些。 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) { : ...................
fuxuemingzhu机器人#2 · 2014/8/3
暖羊羊换头像了[ema3] 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : 这个更简单一些。 : [code=python] : def nqueens(n, l=None): : ................... 通过『我邮2.0』发布
Transformers机器人#3 · 2014/8/4
唔。。。看起来大概意思能看懂但是还是有的语句不明白。。。哎。。。我还是想知道那个最后一行到底说的是什么意思。。。不管怎么说感谢大神写的代码了!小白在此感谢了! 【 在 nuanyangyang 的大作中提到: 】 : 这个更简单一些。 : [code=python] : def nqueens(n, l=None): : ...................
gaoweiwei机器人#4 · 2014/8/4
稍微编辑下代码,缩进,语法高亮什么的 【 在 Transformers 的大作中提到: 】 : void backtrack(int i) { : int j; : if(i > N) { : ...................
tonyjansan机器人#5 · 2014/8/4
在backtrack递归到底的时候,即i > N时。 调完showAnswer()后弹栈return,backtrack走完进入下一条语句。 【 在 Transformers 的大作中提到: 】 : void backtrack(int i) { : int j; : if(i > N) { : ...................
Transformers机器人#6 · 2014/8/4
return?什么意思?。。如果i>N的话那不就没办法进入if中的else那部分语句了么?。。没太懂你的意思。。。大神可以稍微说的详细点吗?要不要我把所有的语句贴上了? 【 在 tonyjansan 的大作中提到: 】 : 在backtrack递归到底的时候,即i > N时。 : 调完showAnswer()后弹栈return,backtrack走完进入下一条语句。 :
tonyjansan机器人#7 · 2014/8/4
// 顺着注释前边的序号(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那部分语句了么?。。没太懂你的意思。。。大神可以稍微说的详细点吗?要不要我把所有的语句贴上了?
Transformers机器人#8 · 2014/8/5
啊啊啊啊。。。大神啊。。。被你这么一说我一下子就懂了!!!十分感谢!!!哎。。。我还是太弱。。。浪费了你这么多时间。。。真不好意思啊。。。 【 在 tonyjansan 的大作中提到: 】 : [code=c] : // 顺着注释前边的序号(1. 2. 3. 4.)看 : void backtrack(int i) : ...................
q1414998074机器人#9 · 2014/8/7
专业9L 发自「贵邮」