排列问题-递归

版权声明:喜欢就点个赞吧,有啥疑问可以留言交流~ https://blog.csdn.net/m0_38015368/article/details/80572835

问题描述:

对输入的元素进行全排列。

代码实现:

#include <bits/stdc++.h>
using namespace std;
void InPut(int * &_list, int &n)
{
    scanf("%d", &n);
    _list = (int *)malloc(sizeof(int) * (n + 1));
    for(int i = 1; i <= n; ++i)
    {
     scanf("%d", _list + i);
//     printf("%d\n", *(_list + i));
    }
}
void OutPut(int _list[], int n)
{
    for(int i = 1; i <= n; ++i)
        printf("%d", _list[i]);
    printf("\n");
}
void Swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}
void Perm(int _list[], int k, int n)
{
    if(k == n)
        OutPut(_list, n);
    else
    {
        for(int i = k; i <= n; ++i)
        {
            Swap(_list[k], _list[i]);
            Perm(_list, k + 1,  n);
            Swap(_list[k], _list[i]);
        }
    }
}
int main()
{
    int *_list;
    int n;
    InPut(_list, n);
    Perm(_list, 1, n);
}

核心代码来自 计算机算法设计与分析第四版。

运行截图:


猜你喜欢

转载自blog.csdn.net/m0_38015368/article/details/80572835