题目来源:
http://bailian.openjudge.cn/practice/2748/
描述
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有‘a‘ < ‘b‘ < ... < ‘y‘ < ‘z‘,而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。
样例输入
abc
样例输出
abc
acb
bac
bca
cab
cba
题意描述:
输入一个由小写字母组成的长度在1到6之间的字符串
输出该串的全排列形式
解题思路:
意即求n个位置上放n个各不相同的字母的所有方案
用深搜,搜索每个位置每一种可能,符合要求输出即可
程序代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 void dfs(int l,int n); 6 char r[10],str[10]; 7 int u[10]; 8 int main() 9 { 10 int l; 11 while(scanf("%s",str) != EOF) 12 { 13 l=strlen(str); 14 memset(u,0,sizeof(u)); 15 sort(str,str+l); 16 dfs(l,0); 17 } 18 return 0; 19 } 20 void dfs(int l,int n) 21 { 22 int i; 23 if(n==l){ 24 for(i=0;i<l;i++) 25 printf("%c",r[i]); 26 printf("\n"); 27 return; 28 } 29 for(i=0;i<l;i++){ 30 if(!u[i]) 31 { 32 r[n]=str[i]; 33 u[i]=1; 34 dfs(l,n+1); 35 36 u[i]=0; 37 } 38 } 39 }
时间: 2024-10-24 23:52:06