#include <iostream> #include <cstdlib> using namespace std; void swap(int & a,int & b) { int temp=a;a=b;b=temp; } void Perm(int list[],int k,int m) { if(k==m) { for(int i=0;i<=m;i++) cout<<list[i]<<" "; cout<<endl; } else for(int j=k;j<=m;j++) { swap(list[k],list[j]); Perm(list,k+1,m); swap(list[k],list[j]); } } int main() { int list[]={1,2,3,4,5,6}; Perm(list,0,3); system("pause"); return EXIT_SUCCESS; } 注:此算法具体详见 算法分析与设计--以大学生程序设计竞赛为例 第58页
思路很清楚,用一个for来保证每一位都有排在前面的机会,从而为全排列奠基。 同时每一个perm函数中都有第二个换位来保证对于for可以根据当前初始值进行排列。 对于我来说,递归比较菜,所以接下来两周博客将会与递归分治相关。 Have fun coding,i_human.Have fun coding,everyone!
转载请注明原文地址: https://ju.6miu.com/read-1122854.html