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;
}
}
}
}