《2022年字符串全排列算法宣贯 .pdf》由会员分享,可在线阅读,更多相关《2022年字符串全排列算法宣贯 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、字符串全排列算法- / 设 R=r1,r2,rn 是要进行排列的n 个元素, Ri=R-ri /(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀 ri得到的排列/ / (1) 当 n=1 时,Perm(R)=(r),其中 r 是集合 R中唯一的元素;/ (2) 当 n1 时, Perm(R)可由 (r1)Perm(R1),(r2)Perm(R2), ,(rn)Perm(Rn)构成/ / 此程序就是按照上述思想来设计的/ / 其中:/ Perm(list,k,m)递归地产生所有前缀是list0:k-1,且后缀是 listk:m的全排列的所有排列。那么调用算法Perm(lis
2、t,0,n-1)则产生 list0:n-1的全排列。/ / for (i=k; i = n; i+) / Swap (listk, listi); / Perm (list, k+1, n); / Swap (list k, list i); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - / / 以上这段代码其实就是实现的(2) 的思想。#include stdafx.h #include #include using nam
3、espace std; void Swap(char& a, char& b) char temp; temp = a; a = b; b = temp; void Perm(char s, int k, int m) if(k = m) / Print one permutation. cout s endl; else for(int i = k; i = m; i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - Swap(sk, si); Perm(s, k + 1, m); Swap(sk, si); int _tmain(int argc, _TCHAR* argv) char s = 123; Perm(s, 0, 2); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -