文章

67

粉丝

207

获赞

29

访问

34.9k

头像
全排列 题解:新手易于理解模板(B站视频套用)
推荐阅读

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char b[1000][10];//输出数组
int c=0;
void swap (char A[],int p,int q){
	char temp;
	temp=A[p];
	A[p]=A[q];
	A[q]=temp;
}
/*void printArray(char A[],int n){  //这种方法输出的先后顺序可能不一样,所以不调用这个输出函数
	for(int i=0;i<=n;i++)
		printf("%c",A[i]);
	printf("\n");
}*/
void perm (char A[],int p,int q){
	if(p==q){
		//printArray(A,q);//输出
	strcpy(b[c],A);
	c++;
	}
	else {
		for(int i=p;i<=q;i++){
			swap(A,p,i);//交换 交换第p个和第i 、第i+1 、i+2个......
			perm(A,p+1,q);//p+1 到q 做全排列
			swap(A,p,i);//还原 还原成全排列前的原数组
		}
		
	}
}
int main(){
	char d[10];
	char A[1000];
	for(int i=0;i<1000;i++)
		A[i]=0;
	for(int i=0;i<10;i++)
		d[i]=0;
	scanf("%s",A);
	int len=strlen(A);
	perm(A,0,len-1);
	//对 b做冒泡排序
	for(int i=0;i<c;i++)
	{
		for(int j= c-2;j>=i;j--){
         if(strcmp(b[j+1],b[j])<0)
		 {
			 strcpy(d,b[j+1]);
			 strcpy(b[j+1],b[j]);
			 strcpy(b[j],d);
		 }
	}
	
	}...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发