擅长排列的小明
2014-04-12 07:00
176 查看
这个问题是一个全排列问题,我使用的是递归算法来求解的,过程还是很有意思的~
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=19
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=19
#include<iostream> #include<math.h> #include<memory.h> using namespace std ; int n,m; int a[10]; int visit[10]; //下面以取两位数为例 void Recursive(int c) { if(c==m) { int result=0; for(int i=0;i<m;i++) result=a[i]*pow(10,m-1-i)+result; //因为a[]存入的是全排列的答案,第一次a[0]=1 a[2]=2 第二次a[0]=1 a[2]=3 这个是按照最高位到最小为依次从小到大输出的,有的童鞋是依次输出a,我是求出页数的值在console没什么区别。 cout<<result<<endl; } else { for(int i=0;i<n;i++) //先确定a[0],然后递归调用确定a[1]在递归时c+2(0+2)碰到第一个判断输出,回到第二个递归的循环,不断改变a[1] { if(!visit[i]) { visit[i]++; a[c]=i+1; Recursive(c+1); visit[i]--; } } } } int main() { int num; cin>>num; while(num--) { cin>>n>>m; memset(visit,0,sizeof(visit)); //visit全部赋值为0; Recursive(0); } }
相关文章推荐