自己写了全排列,悲剧了!
#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;}
#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的值相等。
#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);}
[解决办法]
楼主这个有点求子集的意思,不是全排列的