1199:全排列

简介: 1199:全排列

1199:全排列

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列

我们假设对于小写字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。

【输入】

只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。

【输出】

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S=s1s2...sk,T=t1t2...tk,则S<T等价于,存在p(1≤p≤k),使得s1=t1,s2=t2,...,s(p−1)=t(p−1),sp<tp成立。

【输入样例】

abc

【输出样例】

abc

acb

bac

bca

cab

cba

【提示】

本题目禁止使用STL及包含可以使用的相关调用。

【来源】

No

1. #include<stdio.h>
2. #include<iostream> 
3. #include<cstring>
4. using namespace std;
5. bool b[1001];//标记 
6. char s[1001],as[1001]; //s存储原字符串 as存储排序方案 
7. int len;
8. void dfs(int i)
9. {
10.   for(int j=0;j<len;j++){
11.     if(!b[s[j]]){//判断是否用过 
12.       b[s[j]]=1;
13.       as[i]=s[j];
14.       if(i==len-1) printf("%s\n",as);//长度达到输出 
15.       else dfs(i+1);//否则取下一个长度 
16.       b[s[j]]=0;//标记取消 
17.     }
18.   }
19. }
20. int main()
21. {
22.   scanf("%s",s);
23.   len=strlen(s);
24.   dfs(0);//从长度0开始搜索 
25.   return 0;
26.  }
1. #include<stdio.h>
2. #include<iostream> 
3. #include<cstring>
4. using namespace std;
5. char a[1001];
6. int b[1001],c[1001]={0};
7. int len;
8. void dfs(int n)
9. {
10.   if(n==len){
11.     for(int i=0;i<len;i++) cout<<a[b[i]];
12.     cout<<endl;
13.   }
14.   for(int i=0;i<len;i++){
15.     if(!c[i]){//判断是否用过 
16.       c[i]=1;
17.       b[n]=i;
18.       dfs(n+1);//取下一个长度 
19.       c[i]=0;//标记取消 
20.     }
21.   }
22. }
23. int main()
24. {
25.   scanf("%s",a);
26.   len=strlen(a);
27.   dfs(0);//从长度0开始搜索 
28.   return 0;
29.  }

 

相关文章
|
2月前
|
算法
Leetcode第46题(全排列)
这篇文章介绍了LeetCode第46题“全排列”的解题方法,使用深度优先搜索(DFS)和回溯算法来生成给定数组的所有可能排列。
36 0
Leetcode第46题(全排列)
|
2月前
Leetcode第47题(全排列II)
LeetCode第47题要求返回一个包含重复数字序列的所有不重复全排列,通过深度优先搜索和去重策略来解决。
33 0
|
4月前
|
算法
LeetCode第46题全排列
LeetCode第46题"全排列"的解题方法,利用回溯法避免重复并确保元素的有序性,生成所有可能的排列组合。
LeetCode第46题全排列
|
4月前
|
算法
LeetCode第47题全排列II
LeetCode第47题"全排列II"的解题方法,通过排序和添加去重逻辑,使用回溯法避免生成重复的排列组合。
|
6月前
|
C++
【洛谷 P1706】全排列问题 题解(全排列)
该问题要求按字典序输出从1到n的所有不重复排列。输入为整数n,输出为每行一个的数字序列,每个数字占5个宽度。样例输入3,输出6行全排列。代码使用C++,通过`next_permutation`函数生成所有排列。注意n的范围是1到9。
53 0
|
7月前
|
存储
全排列问题
全排列问题
25 0
|
7月前
|
Java
leetcode-47:全排列 II
leetcode-47:全排列 II
48 0
全排列
全排列,
43 0
|
机器学习/深度学习 存储 算法
算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II
算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II