生成排列

来源:互联网 发布:mac teamviewer官网 编辑:程序博客网 时间:2024/05/13 10:49

第一种算法:

对于1,2,…,n 这n个数,
1.生成数2,3,…n的所有排列,在每个排列前面加上数字1
2.生成数1,3,…n的所有排列,在每个排列前面加上数字2
3.重复以上过程直到生成1,2,…n-1的所有排列,在每个排列前面加上数字n

代码实现:

void perm1(string str,int len,int m){    if (m == len)        cout << str << endl;    else    {        for (int i = m; i < len; i++)        {            char temp = str[m];            str[m] = str[i];            str[i] = temp;            perm1(str, len, m + 1);        }    }}

第二种算法:

void perm2(string str, int len, char* zero, int m){    if (m == len)        cout << zero << endl;    else    {        for (int i = 0; i < len; i++)        {            if (zero[i] == '0')            {                zero[i] = str[m];                perm2(str, len, zero, m + 1);                zero[i] = '0';            }        }    }}
0 0
原创粉丝点击