山東理工OJ 1163 C語言實驗——排列

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1163

好題!

在普通全排列算法上面做改進!!!

#include <stdio.h>
int a[5];
void Permutation(int k,int m)
{
    int i,j,t;
    if(k<m)
    {
        for(i=k;i<=m;i++)
        {
            t=a[i];
            for(j=i;j>k;j--)
                a[j]=a[j-1];
            a[k]=t;
            Permutation(k+1,m);
            t=a[k];
            for(j=k;j<i;j++)
                a[j]=a[j+1];
            a[i]=t;
        }
    }
    else//輸出一個排列
    {
        for(i=1;i<m;i++)
            printf("%d ",a[i]);
        printf("%d\n",a[m]);
    }
}
int main()
{
    int i,b[5];
    for (i=1;i<=4;i++)
        scanf("%d",&b[i]);
    a[1] = b[1]; a[2] = b[2]; a[3] = b[3];
    Permutation(1,3);
    a[1] = b[1]; a[2] = b[2]; a[3] = b[4];
    Permutation(1,3);
    a[1] = b[1]; a[2] = b[3]; a[3] = b[4];
    Permutation(1,3);
    a[1] = b[2]; a[2] = b[3]; a[3] = b[4];
    Permutation(1,3);
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章