AcWing 420. 火星人
原题链接
中等
作者:
美好的事情即将发生
,
2024-04-17 21:14:38
,
所有人可见
,
阅读 4
#include<bits/stdc++.h>
using namespace std;int n,m;
bool b[100010];int a[1000100]; int c[100010];
bool f;
void dfs(int x)
{ if(m<0)return;//达到目的结束,防超时
if(x>n)
{ f=1;
if(!m)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
}m--;
return;
}
else
{
for(int i=1;i<=n;i++)
{
if(!f)i=c[x];//关键,可以直接让dfs从给定的值开始,然后继续回溯
if(b[i]==0)
{
b[i]=1;
a[x]=i;
dfs(x+1);
b[i]=0;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>c[i];
dfs(1);
}