首页 > 其他 > 详细

求解全排列问题

时间:2020-01-03 23:26:43      阅读:101      评论:0      收藏:0      [点我收藏+]

穷举法

//求解全排列问题 
//穷举法
#include<stdio.h>
#define Maxn 10
#define MaxSize 1000
typedef struct{
	struct{
		int a[Maxn];
		int m;
	}data[MaxSize];
	int top;
}StackType;
void insert(int a[],int m,int j,int k){
	int i;
	for(i=m+1;i>j;i--)
		a[i] = a[i-1];
	a[j] = k;
}
void disp(int a[],int m){
	int i;
	for(i=1;i<=m;i++)
		printf("%d",a[i]);
	printf(" ");
}
void copy(int a[],int b[],int m){
	int i;
	for(i=1;i<=m;i++)
		b[i] = a[i];
}
int perm(int n){	//输出1~n的全排列 
	int j,m;
	int b[Maxn],c[Maxn];
	StackType st;
	st.top = -1;
	st.top++;
	st.data[st.top].a[1] = 1;
	st.data[st.top].m = 1;
	while(st.top != -1){
		m = st.data[st.top].m;
		if(m == n){
			disp(st.data[st.top].a,n);
			st.top--;
		}
		else{
			copy(st.data[st.top].a,c,m);
			st.top--;
			for(j=1;j<=m+1;j++){
				copy(c,b,m);
				insert(b,m,j,m+1);
				st.top++;
				copy(b,st.data[st.top].a,m+1);
				st.data[st.top].m = m+1; 
			}
		}
	} 
}
int main(){
	int n=3;
	printf("1~%d的全排列:",n);
	perm(n);
	printf("\n");
} 

  

求解全排列问题

原文:https://www.cnblogs.com/Hqx-curiosity/p/12147319.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!