用回溯解决的素数环问题,有一段代码没看懂

2014-09-21 00:34:10 +08:00
 spencerqiu
问题:1 - 20 这 20 个数字,输出所有使相邻两个数的和皆为素数(包括第 1 个数和第 20 个数)的排列。

下面是代码,主要是第二面的 if 语句中这段没看懂。
search(t+1);
b[i]=true;

搞不懂的在于
1.既然是回溯,比如我在搜第 5 个数的时候发现此时可使用的所有数都无法使用,似乎这里也并没有一段退回第 4 个数的第 i 次选择的代码啊……
2.既然已经 search(t+1) 了,似乎这里就是已经退出 search(t) 了(?)那么 b[i]=true 还会被执行么?

2176 次点击
所在节点    问与答
5 条回复
GtDzx
2014-09-21 00:46:21 +08:00
感觉你对函数调用还是不很理解
search(t+1)执行结束后会返回search(t)的b[i]:=true;继续执行
casparchen
2014-09-21 01:07:36 +08:00
保存现场什么的
xjx0524
2014-09-21 01:10:28 +08:00
先理解一下递归的含义吧,话说现在竞赛不是没有保送了么
randomize
2014-09-21 06:56:11 +08:00
@GtDzx
谢谢大大,大大是说如果 search(t+1) 执行全部失败,会退回到 search(t) ,并且 b[i]=true ,然后在上一次调用继续执行?
randomize
2014-09-21 07:04:59 +08:00
@spencerqiu
PO 主也是学 OI 的?可以留个联系方式交流一下?本人高一 C++ 蒟蒻。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/134736

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX