zoukankan      html  css  js  c++  java
  • 递归算法实现全排列第二章

    算法分析: 

    设list是含有n个不同字符的字符串,

    perm(list,k-1,n)为list[0]~list[k-1]的所有全排列,perm(list,k,n)为list[0]~list[k]的全排列,

    perm(list,k-1,n)处理的字符个数比perm(list,k,n)处理的的字符少一个,

    假设perm(list,k-1,n)可求,对于list[k]位置,可以取list[0]~list[k]的任何值,再组合per(list,k-1,n),这得到perm(list,k,n).

     

    View Code
    #include <iostream.h>
    int num=0;
    inline void Swap(char *a, char *b)
    {// 交换a和b
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    
    void Perm(char list[], int k, int m)
    { //生成list [k:m ]的所有排列方式
        int i;
        if (k == m) {//输出一个排列方式
            for (i = 0; i <= m; i++)
               cout<<list[i];
            num++;
            cout<<endl;
        }
        else // list[k:m ]有多个排列方式
            // 递归地产生这些排列方式
            for (i=k; i <= m; i++) {
                Swap (&list[k], &list[i]);
                Perm (list, k+1, m);
                Swap (&list [k], &list [i]);
            }
    }
    
    int main()
    {
        int n;
        char s[100];
        cout<<"请输入您要排列的数的个数n:";
        cin>>n;
        cout<<"请输入要排列的数"; 
        for(int i=0;i<n;i++)
            cin>>s[i];         
        Perm(s,0,n-1);
        cout<<"一共有:"<<num<<"个组合";
        return 0;
    } 
  • 相关阅读:
    C#高级特性_Attribute
    C#高级特性_Lambda
    委托(delegate)
    C# 属性、索引
    C#中的interface
    枚举型Enum和结构型Stuct
    javascript学习笔记
    github page 和 hexo 搭建在线博客
    2015/9/22 开通博客园
    phoenix 入门
  • 原文地址:https://www.cnblogs.com/aijianiula/p/2726504.html
Copyright © 2011-2022 走看看