这题我使用DFS来解决的,但是每次我写DFS的时候总是坑在递归结束的条件上,每次都要纠结,这次也不例外。不过总算解决了。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
const int N=1005;
int ans[N];
bool visited[N];
int n,m;
bool dfs(int id)
{
if(id==n+1)//就是这里太纠结了
{
m--;
if(m==0)
return true;
return false;
}
for(int i=1;i<=n;i++)
{
if(visited[i])
continue;
visited[i]=true;
ans[id]=i;
if(dfs(id+1))
return true;
visited[i]=false;
}
return false;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(visited,false,sizeof(visited));
dfs(1);
for(int i=1;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n]);
}
return 0;
}