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

这个DFS没有弄明白,请教过程是怎么样的

huaer
2010/3/8镜像同步2 回复
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] */ } }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
jokerlee机器人#1 · 2010/3/8
这是一个典型的回溯 t = r[n], r[n] = r[i], r[i] = t; /* 更改变量 */ checkpermute(r, n+1); /* 递归 */ t = r[n], r[n] = r[i], r[i] = t; /* 恢复变量 */
huaer机器人#2 · 2010/3/8
自己过了一遍过程,这次看明白了。这样做排列问题确实很巧妙。 第一次进循环时更改变量那个地方其实什么也没做,自己分析的时候被这个迷惑了。 学长有没有推荐简单一些的讲解这个算法的资料?搜了下算法导论那个本书中的内容好像没有直接讲这个的。 【 在 jokerlee 的大作中提到: 】 : 这是一个典型的回溯 : t = r[n], r[n] = r[i], r[i] = t; /* 更改变量 */ : checkpermute(r, n+1); /* 递归 */ : ...................