zoukankan      html  css  js  c++  java
  • 全排列

    全排列

    链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=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,...,sp-1=tp-1, sp<tp成立。

     

    【输入样例】

    abc

    【输出样例】

    abc
    acb
    bac
    bca
    cab
    cba
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    string s;
    char m[28];
    int len,t[28];
    void print(){
        printf("%s",m);
        printf("
    ");
    }
    void f(int k){
        for(int i=0;i<len;i++)
        {
            if(!t[s[i]-'a'])
            {
                t[s[i]-'a']=1;
                m[k]=s[i];
                if(k==len-1){
                    print();
                }
                else f(k+1);
                t[s[i]-'a']=0;
                
            }
        }
    }
    int main(){
        cin>>s;
        len=s.length();
        f(0);
        
    }

     如果本题不禁用stl,就可直接上函数:

    #include<bits/stdc++.h>
    using namespace std;
    char s[20];
    int main(){
        string c;
        cin>>c;
        int len = c.length();
        for(int i = 0; i < len; i++)s[i] = c[i];
        do{
            for(int i=0;i<len;i++)printf("%c",s[i]);
            printf("
    ");
        }while(next_permutation(s, s+len));
    }
    View Code
  • 相关阅读:
    一些软件设计的原则
    网站的分布式架构
    架构设计--逻辑层 vs 物理层
    社会化海量数据采集爬虫框架搭建
    面向设计原则理解
    职场中架构师面试,你会怎么回答?
    支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现
    关键路径法
    团队建设动车模型
    案例:双代号网络图在控制工程造价中的应用
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7629995.html
Copyright © 2011-2022 走看看