题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=32
本题就是DFS练手,要控制输出条件,以及在a数组的初始化选择全部初始化为n,为了控制DFS条件
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,r;
int a[100];
bool b[100];
void dfs(int x,int y)
{
if(y>r)
{
for(int i=1; i<y; i++)
{
printf("%d",a[i]);
}
printf("\n");
return;
}
else
{
for(int j=n;j>=1;j--)
{
if(!b[j])
{
if(j<a[y-1])
{
a[y]=j;
b[j]=true;
dfs(x-1,y+1);
a[y]=0;
b[j]=false;
}
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&r)!=EOF)
{
memset(b,false,sizeof(b));
memset(a,n,sizeof(a));
dfs(n,1);
}
return 0;
}