首页 新闻 会员 周边

C++中的排列问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-25 13:13

怎样输出一组数的所有排列方式? (不是排列的总数是具体的排列方式)

例:

输入:

1 2 3

输出:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

炽 雪的主页 炽 雪 | 初学一级 | 园豆:158
提问于:2011-09-02 08:51
< >
分享
最佳答案
0

#include <iostream>
using namespace std;
int n = 0;

void swap(char *a ,char *b)
{
int m ;
m
= *a;
*a = *b;
*b = m;
}

void perm(char list[],int k, int m )
{
int i;
if(k >m)
{
for(i = 0 ; i <= m ; i++)
{
cout
<<"r"<<list[i];

}
cout
<<"/n";
n
++;
}
else
{
for(i = k ; i <=m;i++)
{
swap(
&list[k],&list[i]);
perm(list,k
+1,m);
swap(
&list[k],&list[i]);
}
}
}

int main()
{
char list[] ="123";
perm(list,
0,2);
cout
<<"total:"<<n<<"/n";
return 0;
}

收获园豆:5
artwl | 专家六级 |园豆:16736 | 2011-09-02 09:16

求原理!

如是然 | 园豆:226 (菜鸟二级) | 2011-09-02 18:24

@如是然:递规的用法

artwl | 园豆:16736 (专家六级) | 2011-09-02 18:52

@天行健 自强不息:我看到了,主要是不明白你的解题思路

如是然 | 园豆:226 (菜鸟二级) | 2011-09-02 19:47
其他回答(1)
0

int partition(int* a,int l,int r)
    {

    int i=l-1,j=r,v=a[r]; http://www.it8008.com

    while(1)

    {

    while(a[++i]<v||a[--j]>v) if(j<=i) break;

    if(i>=j)

    break;

    swap(a[i],a[j]);

    }

    swap(a[i],a[r]);

    return i;

    }

    void qsort(int* a,int l,int r)

    {

    if(l>=r) return;

    int i = partition(a,l,r);

    qsort(a,l,i-1);

    qsort(a,i+1,r);

    }

http://www.it8008.com/dev_language/c_related/cplus_language/2011-08-18/319.html

wyatt_123 | 园豆:220 (菜鸟二级) | 2011-09-16 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册