衡水手机网站建设价格,建站资讯,网站关键字多少个,阿里云服务器在哪里算法设计与分析——递归与分治策略——全排列
全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位#xff0c;如果递归到了最后一位#xff0c;则输出他当前的全排列序列。 如果没有到达最后一位#xff0c;则循环的交换该第K个元素与其后面的所有…算法设计与分析——递归与分治策略——全排列
全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位如果递归到了最后一位则输出他当前的全排列序列。 如果没有到达最后一位则循环的交换该第K个元素与其后面的所有元素每次交换后立即进入递归程序进入下一层的递归。 代码1
#includeiostream
using namespace std;
template class Type
void perm(Type *list,int k,int m)
{if(k m)//此时递归到了最后一层 {for(int i0;im;i){coutlist[i] ;} coutendl;}else{for(int ik;im;i)//将传来的参数区间的进行该位置的所有全排列 {swap(list[k],list[i]);//交换位置 perm(list,k1,m);//递归嵌套到下一层去即少一位后的全排列 swap(list[k],list[i]);//回溯的思想返回到原来没有排列的样子 }}
}
int main()
{int n;cout输入需要进行全排列的数据长度endl;cinn;int list[n];cout输入需要进行全排列的数据:endl;for(int i0;in;i){cinlist[i];} cout输出全排列的结果endl; perm(list,0,n-1);return 0;} #includebits/stdc.h
using namespace std;
int number0;
void arrange(vectorint nums,int left,int right)
{if(leftright){for(auto a:nums){cout a ;}cout endl;number; }else{for (int i left; i right; i){swap(nums[left], nums[i]);arrange(nums, left 1, right);swap(nums[left], nums[i]);}}
}int main()
{vectorint nums {1,2,3};int count nums.size()-1;arrange(nums, 0,count);cout全排列一共有number个排列endl; system(pause);
}