Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342265
  • 博文数量: 122
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1191
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 11:12
文章分类

全部博文(122)

文章存档

2010年(122)

我的朋友

分类: C/C++

2010-03-26 19:57:51

n个字符a[n],输出这n个字符的所有排列。比如,有字符 A B C 则其所有排列为:

ABC

ACB

BAC

BCA

CBA

CAB

Foo(char * str,int s,int e)l输入str中从se字符的所有全排列,求所有字符的全排列即为Foo(a,0,n);

Foo(a,0,n)={a[0]为首元素的全排列}+{a[1]为首元素的全排列}+……+{a[n-1]为首元素的全排列}

其中{a[0]为首元素的全排列}便是Foo(a,1,n),规模变小了。同理,以a[i]为首元素的全排列是将a[i]a[0]交换后的Foo(a,1,n),用递归求解便得到如下程序:

#include<iostream>
#include<string>
using namespace std;
char str[100];
void swap(int i,int j)
{
    char ch=str[i];
    str[i]=str[j];
    str[j]=ch;
}
void Foo(char *str,int s,int e)
{
    int start;
    if(s==0)
        start=s;
    else
        start=s+1;
    for(int i=start;i<e;++i)
    {
        swap(s,i);
            cout<<str<<endl;
        Foo(str,s+1,e);
        swap(s,i);    
    }
}
int main()
{
    cin>>str;
    Foo(str,0,strlen(str));
    return 0;
}


阅读(629) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~