您的位置:首页 > 其它

擅长排列的小明-递归

2013-09-22 10:19 190 查看
nyoj第19题http://acm.nyist.net/JudgeOnline/problem.php?pid=19

在1-n中选取m个字符进行全排列,按字典序全部输出。

可以用递归的思想,也可以用深搜的思想,但是代码是一样的。往深处递归时通过全局变量a和vis传递信息,而在返回时,要消除信息。

#include<iostream>
#include<stdio.h>
#include<memory.h>
using namespace std;

bool vis[10];
int a[10];
void f(int n,int m,int lev);
int main(){
int k;
cin>>k;
while(k--){
int n,m;
cin>>n>>m;
memset(vis,false,sizeof(vis));
f(n,m,1);
}
//system("pause");
return 0;
}

void f(int n,int m,int lev){
int i;
if(lev==m+1){
for(i=1;i<=m;i++)
cout<<a[i];
putchar(10);
}
else{
for(i=1;i<=n;i++){
if(!vis[i]){
a[lev]=i;
vis[i]=true;
f(n,m,lev+1);
vis[i]=false;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: