5-3回溯-数的全排列.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数的全排列问题 1 对于指定的n个数字,输出它所有可能 的排列。 容易知道n个数字恰有n!个排列。 2 3 它有一个隐含的约束条件:每个 数字用且只能用一次。 数的全排列问题 全排列问题的解空间树 设n=4 ,而需要排列的4个数字分别为:1,2 ,3 ,4。回顾 我们手工对这四个数字的排列过程: (1 2 3 4) 1 (1 2 4 3) 1 2 3 4 … … (1 3 2 4) 1 2 3 4 1 2 3 4 1 2 3 4 (……………) 1 2 3 4 1 2 3 4 1 2 3 4 (4 3 2 1) 1 2 3 4 1 2 3 4 1 2 3 4 全排列问题中的数据表示 数组rec[n+1]记 数组used[n+1] 录当前搜索路径 记录当前搜索 上的每个结点所 路径上已经被 放置的数字; 使用过的数字; 用递归回溯法求N数全排列问题 先回顾递归回溯法的一般形式: Try(s){ 做挑选候选者的准备; while (未成功且还有候选者) { 挑选下一个候选者next ; if (next可接受) { 记录next ; if (满足成功条件) {成功并输出结果} else Try(s+1); if (不成功) 删去next的记录; }} return 成功与否} 用递归回溯法求N数全排列问题 Try(s){ s为准备放置数字的位数 令数字从j = 0 开始;q=0表示未成功。 候选者为数字1到n。 数字不到n就还有候选者 做挑选候选者的准备; 数字加1 j = 0; q = 0; (!q j n ) { 若数字没有使用过,便可接受 while (未成功且还有候选者) { 挑选下一个候选者next ; j++; 记下该位置的数字 (used[j](Safe(j)) {0) { if (next可接受) { n个位置都放完就成功了 Record (s,j); rec[s]=j; used[j]=1; 记录next ; (s = = n) {q = 1; output( rec );} if (满

文档评论(0)

恬淡虚无 + 关注
实名认证
内容提供者

学高为师,身正为范.师者,传道授业解惑也。做一个有理想,有道德,有思想,有文化,有信念的人。 学无止境:活到老,学到老!有缘学习更多关注桃报:奉献教育,点店铺。

1亿VIP精品文档

相关文档