【题目描述】
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。
【输入】
只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
【输出】
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S=s1s2...sk,T=t1t2...tkS=s1s2...sk,T=t1t2...tk,则S<T等价于,存在p(1<=p<=k),使得s1=t1,s2=t2,...,sp−1=tp−1,sp<tps1=t1,s2=t2,...,sp−1=tp−1,sp<tp成立。
【输入样例】
abc
【输出样例】
abc acb bac bca cab cba
【提示】
本题目禁止使用STL及包含可以使用的相关调用。
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f #define MAX(x,y) (x>y?x:y) #define MIN(x,y) (x>y?y:x) #define M 1000 int vis[M]; int len; char a[M],c[M]; void dfs(int step) { if (step == len) { for (int i = 0; i < step; i++) { printf("%c", c[i]); } printf("\n"); return; } for (int j = 0; j < len; j++) { if (vis[j] == 0) { c[step] = a[j]; vis[j] = 1; dfs(step + 1); vis[j] = 0; } } } int main() { scanf("%s", a); len = strlen(a); dfs(0); return 0; }
一本通 1199:全排列
最新推荐文章于 2023-08-01 17:09:14 发布