搜索_全排列

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。
Input
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
Output
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S = s 1s 2...s k , T = t 1t 2...t k,则S < T 等价于,存在p (1 <= p <= k),使得
s 1 = t 1, s 2 = t 2, ..., s p - 1 = t p - 1, s p < t p成立。
Sample Input
abc
Sample Output
abc
acb
bac
bca
cab
cba

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

const int maxn = 10;
char a[maxn];
char temp[maxn];
bool vis[maxn];

void dfs(int x,int len) {
    if (x == len) printf("%s\n",temp);
    for (int i = 0; i < len; i++) {
        if (!vis[i]) {//数组未被使用过 
            temp[x] = a[i];
            vis[i] = true;
            dfs(x + 1, len);
            vis[i] = false;
        }
    }
}

int main() {
    scanf("%s", a);
    int len = strlen(a);
    memset(vis, 0, sizeof(vis));
    dfs(0,len);
    return 0;
}
/*
int main() {
    scanf("%s", a);
    int len = strlen(a);
    sort(a, a + len);
    printf("%s\n", a);
    while (next_permutation(a, a + len)) {//直接用STL内置函数可以直接得到答案
        printf("%s\n", a);
    }


    return 0;
}
*/
全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务