今天我们来介绍一下莆二OJ上的#T1199. 全排列。
废话不说,题目先看
#T1199. 全排列
- 传统题1000ms128MiB
题目描述
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入
只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s\_1s\_2...s\_k,T = t\_1t\_2...t\_kS=s_1s_2...s_k,T=t_1t_2...t_k,则S
样例
输入数据 1
abc
Copy
输出数据 1
abc
acb
bac
bca
cab
cba
Copy
来源
一本通在线评测
这一题可以用回溯的方法来做
源码:
#include <bits/stdc++.h>
using namespace std;
int i,j;
const int maxn=10+5;
char ch[maxn],temp[maxn];
bool judge[maxn];
int cnt;
inline void sequence(int cnt){
if(cnt==strlen(ch)){
temp[strlen(ch)]='\0';
cout<<temp<<endl;
}
for(int i=0;i<strlen(ch);i++){
if(judge[i]==0){
judge[i]=1;
temp[cnt]=ch[i];
sequence(cnt+1);
judge[i]=0;
}
}
}
int main(){
cin>>ch;
sequence(0);
return 0;
}
我是小黑子