简单的递归——全排列

mac2022-06-30  24

本分类只是对于算法的体现或是自己简单的理解,没有过多的概念,个人练习。

#include <iostream> using namespace std; int n=0; //横向递归,逐个求解子问题,纵向递归,解决子问题 inline void Swap(char *a ,char *b) { int temp = *a; *a = *b; *b = m; } void perm(char list[],int k, int m )//产生list[k:m]的所有排列 { int i; if(k==m)//只剩下一个元素 { for(i = 0 ; i <= m ; i++) { cout<<list[i]; } cout<<endl; n++; } else//还有多个元素待排列,递归产生排列 { for(i = k ; i <=m;i++) { //通过交换,获得解,还原数据 Swap(&list[k],&list[i]); perm(list,k+1,m); Swap(&list[k],&list[i]); } } } int main() { char list[] ="123"; perm(list,0,2); cout<<"total:"<<n<<endl; return 0; }
最新回复(0)