返回信息流void
checkpermute(Rect *r, int n)
{
Rect t;
int i;
if(n == 4)
checkrotate(r, 0);
for(i=n; i<4; i++) {
t = r[n], r[n] = r[i], r[i] = t; /* swap r[i], r[n] */
checkpermute(r, n+1);
t = r[n], r[n] = r[i], r[i] = t; /* swap r[i], r[n] */
}
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #36376同步于 2010/3/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
这个DFS没有弄明白,请教过程是怎么样的
huaer
2010/3/8镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
这是一个典型的回溯
t = r[n], r[n] = r[i], r[i] = t; /* 更改变量 */
checkpermute(r, n+1); /* 递归 */
t = r[n], r[n] = r[i], r[i] = t; /* 恢复变量 */
自己过了一遍过程,这次看明白了。这样做排列问题确实很巧妙。
第一次进循环时更改变量那个地方其实什么也没做,自己分析的时候被这个迷惑了。
学长有没有推荐简单一些的讲解这个算法的资料?搜了下算法导论那个本书中的内容好像没有直接讲这个的。
【 在 jokerlee 的大作中提到: 】
: 这是一个典型的回溯
: t = r[n], r[n] = r[i], r[i] = t; /* 更改变量 */
: checkpermute(r, n+1); /* 递归 */
: ...................