求助大佬!!!全排列20分,全都是超时o(╥﹏╥)o
查看原帖
求助大佬!!!全排列20分,全都是超时o(╥﹏╥)o
478755
Karis楼主2021/5/2 10:39
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,gd[10001],a[10001],b[10001],deen,num=0;//a[]为输入的排列顺序,b[]为生成的排列顺序,进行对照;//gd[]标记这个数是否被用过; 
void print(){
	for(int i=1;i<=n;i++)
		printf("%d ",b[i]);
	return ;
}
void dfs(int dee){
	if(dee>n){
		num++;
		if(deen==0){
			for(int i=1;i<=n;i++){
			if(a[i]!=b[i])
				return; 
			}
				deen=num+m;
				return;
			}
		if(num==deen){
			print();
			return ;
		}
		else
		 return ;
	}
	for(int i=1;i<=n;i++){
		if(!gd[i]){
			gd[i]=1;
			b[dee]=i;
			dfs(dee+1);
			gd[i]=0;
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	dfs(1);
	return 0;
}

2021/5/2 10:39
加载中...