全排列的算法思想

来源:互联网 发布:激战2人类男捏脸数据库 编辑:程序博客网 时间:2024/06/07 04:09
前几天的一道面试题目,要求输入4个数进行全排列并进行按行输出,精髓在于运用递归的思想。
1,2两个数的全排列是{1,2}、{2,1},1,2,3三个数的全排列是{1,2,3}、{1,3,2}、{2,1,3},{2,3,1}、{3,1,2}、{3,2,1},根据以上规律可以看出,假如有n个数则它的全排列是以n个数开头的(n-1)的全排列,以此类推
以下个人的代码片段:
#include <iostream>  #include <algorithm>  using namespace std;int n = 0;bool IsSwap(int list[], int k, int m){for (int i = k; i < m; i++)if (list[i] == list[m])return true;return false;}void FullPerm(int list[], int k, int m){if (k == m){for (int i = 0; i < 3; i++)cout << list[i] << " ";cout << endl;n++;}else{for (int i = k; i <= m; i++){if (!IsSwap(list, k, i)){swap(list[i], list[k]);FullPerm(list, k + 1, m);swap(list[i], list[k]);}}}}int main(){int list[4] = { 1,2,3,4 };FullPerm(list, 0, 3);cout << "全排列数量:" << n << endl;system("pause");return 0;}



原创粉丝点击