全排列(按字典序)


输出1到n的全排列 (字典序) 

伪代码:
void print_per(序列A, 集合S){
	if(S为空){
		输出序列A 
	}else{
		按照从小到大的顺序考虑S中的每个元素V
		print_per(在A的末尾添加V得到的新序列, S-{V}); 
	}
} 

void print_per(int n, int cur, int* a){
	if(n == cur)   //递归边界 
	    for(i=0; i<n; i++)
	        cout << a[i] << " ";
	else{
		for(i=1; i<=n; i++){    //尝试在a[cur]中填各种整数i 
			bool ok = true;
			for(j=0; j<cur && ok; j++)
			    if(i == a[j])     //i已经在a[0] 到 a[cur]中出现过,则不能再选 
			        ok = false;
			if(ok){     
				a[cur] = i;
				print_per(n, cur+1, a);   //递归调用 
			}
		}
	} 
} 
posted @ 2016-09-13 12:42  阿文的博客  阅读(1363)  评论(0编辑  收藏  举报