P1088 [NOIP2004 普及组] 火星人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream>
using namespace std ;
const int N = 1e4+10 ;
int n , m , st[N] , res[N] , check[N] , a , b ;
void dfs (int x)
{
if (b == 1)
return ;
if (x > n)
{
a++ ;
if (a == m+1)
{
for (int i = 1;i <= n;i++)
printf ("%d ",res[i]) ;
printf ("\n") ;
b = 1 ;
}
return ;
}
for (int i = 1;i <= n;i++)
{
if (a == 0) i = st[x] ;
if (!check[i])
{
check[i] = 1 ;
res[x] = i ;
dfs (x+1) ;
check[i] = 0 ;
}
}
}
int main ()
{
scanf ("%d%d",&n,&m);
for (int i = 1;i <= n;i++)
scanf ("%d",&st[i]) ;
dfs (1) ;
return 0 ;
}