特殊状态的枚举
作者:互联网
- 不调用next_permutation()
1 bool used[MAX_N]; 2 int perm[MAX_N]; 3 4 // 生成{0, 1, 2, 3, ..., n-1}的n!种排列 5 6 void permutation(int pos, int n) { 7 if (pos == n) { 8 // 这里写需要对perm进行的操作 9 retrun ; 10 } 11 12 // 针对perm的第pos个位置,究竟使用0~n-1的哪一个进行循环 13 for (int i = 0; i < n; i++) { 14 if (!used[i]) { 15 perm[pos] = i; 16 // i已经被使用了,所以把标志设置为true 17 used[i] = true; 18 permutation(pos + 1, n); 19 // 返回之后把标志复位 20 used[i] = false; 21 } 22 } 23 return ;
- 调用next_permutation()
1 #include <algorithm> 2 3 // 即使有重复的元素也会生成所有的排列 4 // next_permutation是按照字典序来生成下一个排列的 5 int perm[MAX_N]; 6 7 void permutation(int n) { 8 for (int i = 0; i < n; i++) 9 perm[i] = i; 10 do { 11 // 这里写需要对perm进行的操作 12 } while (next_permutation(perm, perm + n)); 13 // 所有的排列都生成后,next_permutation会返回false 14 return ; 15 }
标签:状态,特殊,int,pos,perm,next,枚举,used,permutation 来源: https://www.cnblogs.com/zenghaifan/p/15315907.html