acm题 用c语言设计一个递归算法求全排列

如题所述

//1.cpp生成1~n的全排列
#include<stdio.h>
void Arrange(int cur,int n,int* arr)
{
    if(cur==n+1)
    {
        for(int i=1;i<cur;i++)
            printf("%d ",arr[i]);
        printf("\n");
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        int ok=1;
        for(int j=1;j<cur;j++)
            if(arr[j]==i)
                ok=0;
        if(ok)
        {
            arr[cur]=i;
            Arrange(cur+1,n,arr);
        }
    }
}
int main()
{
    int arr[15];
    //生成1~n的排列
    int n;
    printf("Input n:");
    scanf("%d",&n);
    Arrange(1,n,arr);
    return 0;
}
//2.cpp生成集合中元素的全排列
#include<stdio.h>
int Set[15];
int Arr[15];
int n;
void Arrange(int cur)
{
    if(cur==n+1)
    {
        for(int i=1;i<cur;i++)
            printf("%d ",Arr[i]);
        printf("\n");
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        int ok=1;
        for(int j=1;j<cur;j++)
            if(Arr[j]==Set[i])
                ok=0;
        if(ok)
        {
            Arr[cur]=Set[i];
            Arrange(cur+1);
        }
    }
}
int main()
{
    printf("Input number of elem:");
    scanf("%d",&n);//元素个数
    printf("Input elems:");
    for(int i=1;i<=n;i++)//元素
        scanf("%d",&Set[i]);
    Arrange(1);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-21
#include "stdio.h"
#include "conio.h"

/*把数组中的afrom到ato数据排序*/
void paixu(int a[],int afrom,int ato)
{
int i,maxi,temp;
if(afrom==ato) return;

paixu(a,afrom+1,ato);
if(a[afrom]<a[afrom+1]) {
temp=a[afrom];
a[afrom]=a[afrom+1];
a[afrom+1]=temp;
paixu(a,afrom+1,ato);
return;
}
else
return;
}

main()
{
int i;
int a[]={9,8,5,4,9,8,6,5,7,5};
paixu(a,0,9);

for(i=0;i<10;i++)
printf("%4d",a[i]);

printf("\n");
getch();
}本回答被网友采纳
第2个回答  2017-11-15
这是排序 不是全排列