擅长排列的小明-递归

来源:互联网 发布:windows 95 原版iso 编辑:程序博客网 时间:2024/05/01 20:10

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