12-全排列问题

全排列问题
在这里插入图片描述在这里插入图片描述算法解释:
在这里插入图片描述
画出树形结构如下:
在这里插入图片描述实现思路:
可以用交换来实现–定义k,m 指数组的下标 当k=m的时候说明局部规模为1,即排列完成。
所以给一个j 进行排列的时候 将k和j指向的值进行交换
首先是1和1交换 然后对2,3进行全排列
j++ k和j交换 即1和2交换 那么排列的数据就是1,3
以此类推
在这里插入图片描述
代码实现:

void swap(int &a, int &b)
{
        int tmp = a;
        a = b;
        b = tmp;
}
void Perm(int *ar,int k,int m)//为啥是*ar
{
        if (k == m)
        {
               for (int i = 0; i < =m; ++i)
               {
                       cout << ar[i] << " ";
               }
               cout << endl;
        }
        else
        {
               for (int j = k; j <= m; ++j)
               {
                       swap(ar[k], ar[j]);
                       Perm(ar, k + 1, m);
                       swap(ar[k], ar[j]);
               }
        }              
}
int main()
{
        int ar[] = { 1,2,3 };
        int n = sizeof(ar) / sizeof(ar[0]);
        Perm(ar, 0, n - 1);
        return 0;
}

k和m不相等 不相等的话把k给j交换 相等的话说明排列好了 直接输出即可
在这里插入图片描述在这里插入图片描述

发布了82 篇原创文章 · 获赞 7 · 访问量 4184

猜你喜欢

转载自blog.csdn.net/sunshine612/article/details/104702780