生成可重集的排序 (白书P184)

Posted yxysuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成可重集的排序 (白书P184)相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ans[6];
int book[6],a[6],n;
void dfs(int cnt)
{
	int i,j;
	if(cnt==n) {
		for(i=0;i<n;i++) 
		if(!i) printf("%d",ans[i]);
		else printf(" %d",ans[i]);
		printf("\n");
		return ;
	}
	for(i=0;i<n;i++) {
		if(book[i]) continue;
	    book[i]=1;
		ans[cnt]=a[i];
		dfs(cnt+1);
		book[i]=0;
		while(i<n&&a[i]==a[i+1]) i++;
	}
}

int main()
{
	while(cin>>n) {
		memset(book,0,sizeof(book));
		memset(ans,0,sizeof(ans));
		for(int i=0;i<n;i++) cin>>a[i];
		dfs(0);
	}
	
}

以上是关于生成可重集的排序 (白书P184)的主要内容,如果未能解决你的问题,请参考以下文章

生成可重集的排列

51nod 1384 可重集的全排列

算法入门经典-第七章 例题7-2-2 可重集的排列

nth Permutation LightOJ - 1060

BZOJ4547Hdu5171 小奇的集合 矩阵乘法

一些杂碎的知识点