您的位置:首页 > 其它

擅长排列的小明

2014-04-12 07:00 176 查看
这个问题是一个全排列问题,我使用的是递归算法来求解的,过程还是很有意思的~

题目: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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stl 递归算法 算法