使用全排列,怎么剪枝
查看原帖
使用全排列,怎么剪枝
274208
bingnoi楼主2021/3/31 23:11
#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int number[maxn],output[maxn],used[maxn];
int step=0,total=0;
int mycount=0;
void print(){
	for(int m=0;m<total;m++){
		printf("%d ",output[m]);
	}
	printf("\n");
}
void dfs(int k){
	if(k==total){
		mycount++;
		if(mycount==step+1)
			print();
		//exit(0);
	}
	for(int m=1;m<=total;m++){
		if(!used[number[m]]){
			output[k]=number[m];
			used[number[m]]=1;
			dfs(k+1);
			used[number[m]]=0;
		}
	}
}
int main()
{
	freopen("test.txt","r",stdin);
	cin>>total;
	cin>>step;
	for(int m=1;m<=total;m++){
		cin>>number[m];
	}
	dfs(0); 
	return 0;
}

有大佬写的剪枝,有点没太看懂...

2021/3/31 23:11
加载中...