读书人

自个儿写了全排列,悲剧了

发布时间: 2012-09-10 11:02:32 作者: rapoo

自己写了全排列,悲剧了!

C/C++ code
#include <cstdlib>#include <iostream>using namespace std;int  void perms(int* a, int len, bool* flag){    for(int i = 0; i<len; i++){        if( flag[i] == false){            flag[i] = true;            printf("%-2d", a[i]);            perms(a, len, flag);            flag[i] = false;        }    }}int main(int argc, char *argv[]){    int per[5] = {1, 2, 3, 4, 5};    bool flag[5] = {0};    perms(per, 5, flag);    system("PAUSE");    return EXIT_SUCCESS;}

程序有问题,求指点,谢谢!

[解决办法]
C/C++ code
#include <stdio.h>#include <stdlib.h>int res[5];void print(void){    for(int i = 0; i < 5; ++i)        printf("%d ", res[i]);    printf("\n");}void perms(int* a, int len, bool* flag, int depth){    if(depth == 5)    {        print();        return;    }    for(int i = 0; i < len; ++i)    {        if(flag[i] == false)        {            flag[i] = true;            res[depth] = a[i];            perms(a, len, flag, depth + 1);            flag[i] = false;        }    }}int main(int argc, char* argv[]){    int per[5] = {1, 2, 3, 4, 5};    bool flag[5] = {0};    perms(per, 5, flag, 0);    return EXIT_SUCCESS;}
[解决办法]
从长度为n的数组src中取出m个进行全排列,pos的值要求与m的值相等。
C/C++ code
#include <stdio.h>#include <stdlib.h>void pnm2(int n, char src[], int m, int pos){    if(m==0)    {        int i;            for(i=-1*pos; i<0; ++i)        {            printf("%c", src[i]);        }        printf("\n");                return;    }    else    {        int i;        for(i=0; i<n; ++i)        {            int temp = src[0];            src[0] = src[i];            src[i] = temp;            pnm2(n-1, &src[1], m-1, pos);            temp = src[0];            src[0] = src[i];            src[i] = temp;        }    }}void main(){    int n = 3;    char obj[4] = {'0','1','2','3'};        pnm2(4, obj, n, n);}
[解决办法]
楼主这个有点求子集的意思,不是全排列的

读书人网 >C语言

热点推荐