其他分享
首页 > 其他分享> > 洛谷P1088 火星人

洛谷P1088 火星人

作者:互联网

//其实就是全排列  
//我们从外星人给的那串数字往下搜索 
//一直往下拓展m次 
//最后输出结果 
//虽然看起来很暴力,但是题目上说了m非常小 
#include<bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
using namespace std;
int n,m;
#define maxn 10009
int a[maxn];
int b[maxn];
bool in[maxn]; 
int ks=0;
void dfs(int rest)
{
    if(rest==n+1)
    {
        ks++;
        if(ks==1+m)//这里+1是因为外星人自己给的那串数字搜索完了不能算 
        {
            for(int i=1;i<=n;i++)
            {
                printf("%d ",a[i]);
            }
            exit(0);
        }
            
    }
    for(int i=1;i<=n;i++)
    {
        if(ks==0)//一轮还没搜完,先按照外星人的顺序走 
        {
            i=a[rest];
        }
        if(in[i]==0)
        {
            in[i]=1;
            a[rest]=i;
            dfs(rest+1);
            in[i]=0;
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    dfs(1);
    return 0;
}

 

标签:火星人,洛谷,int,rest,ks,maxn,long,P1088,define
来源: https://www.cnblogs.com/lzy-blog/p/11173310.html