• 全排列


    从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

    至于如何用代码实现, 我分了两种情况

    1. 在这 n 个元素中不存在相同元素

    2. 在这 n 个元素中存在相同元素

    #include <iostream>    // 不含相同元素的全排列 
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    char str[10];
    
    void solve(char *str_begin, char *str_end)
    {
    //    sort(str, str+strlen(str));
    //    puts(str);
        if(*str_end == '')
        {
            puts(str_begin);
        }
        
        else{
            for(char *tstr = str_end; *tstr != ''; tstr++)
            {
                    swap(*str_end, *tstr);
                    solve(str_begin, str_end+1);
                    swap(*str_end, *tstr);
            }
        }
    }
    /*
    void Permutation(char* pStr, char* pBegin)
    {
    //    assert(pStr && pBegin);
    
        if(*pBegin == '')
            printf("%s
    ",pStr);
        else
        {
            for(char* pCh = pBegin; *pCh != ''; pCh++)
            {
                swap(*pBegin,*pCh);
                Permutation(pStr, pBegin+1);
                swap(*pBegin,*pCh);
            }
        }
    }
    */
    int main()
    {
        gets(str);
        solve(str, str);
        puts("");
    //    Permutation(str, str);
        
        return 0;
    }

    下面是含有相同元素的全排列

    #include <iostream>    // 含相同字符的字符串全排列
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    char str1[10], str2[10];
    int len;
    
    void solve(char *d, char *s, int i)
    {
        char t;
        for(int j = 0; j< len; j++)
        {
            if(j> 0 && s[j] == s[j-1])
                continue;
            else if(s[j] != '#'){
                d[i] = s[j];
                t = s[j];
                s[j] = '#';
                if(i == len-1){
                    d[len] = '';
                    puts(d);
                }
                else{
                    solve(d, s, i+1);
                }
                s[j] = t;
            }
        }
    }
    
    int main()
    {
        gets(str1);
        len = strlen(str1);
        sort(str1, str1+len);
    //    puts(str1);
        solve(str2, str1, 0);
    
        return 0;
    }
    转载请注明出处:http://www.cnblogs.com/ygdblogs
  • 相关阅读:
    JS焦点图手动切换
    Cookie
    javaScript字符串方法(常用的)
    javaScript函数
    JavaScript条件语句和循环语句
    JavaScript基本的数据类型
    数据库的四个基本语句
    CSS文本样式
    HTML图片
    C#集合
  • 原文地址:https://www.cnblogs.com/ygdblogs/p/5373164.html
Copyright © 2020-2023  润新知