集合之全排列
来源:互联网 发布:cosplay服装淘宝 编辑:程序博客网 时间:2024/04/29 17:46
有六人分别标记为 A, A, B, B, C, C ,输出此六人站队情况。要求:同标记不得连续出现,如:ABACBC (正确);ABABCC (错误)
解决此问题关键点在于:如何输出一个集合的全排列?
当然用循环也是可以做的,不过那样子会显得不那么Elegant。下面给出递归法求解此问题的过程。
递归法
#include <iostream>using namespace std;int count = 0;void swap(char *array, int i, int j);bool validate(char *array);void permutation_validate(char *array, int start, int end);int main(int argc, char *argv[]){ char str[] = "AABBCC"; cout << str << endl; cout << "--------" << endl; permutation_validate(str, 0, 5); cout << "ALL non-repetitive permutation count: " << count/2 << endl; return 0;}void swap(char *array, int i, int j){ char temp = 0; temp = array[i]; array[i] = array[j]; array[j] = temp;}bool validate(char *array){ int i = 0; char buff = array[i]; i++; while(array[i] != 0){ if (buff == array[i]) return false; buff = array[i]; i++; } return true;}void permutation_validate(char *array, int start, int end){ if(end < 1){ return; } if(start == end){ if(validate(array)){ count = count + 1; for(int i = 0; i <= end; i++) cout << array[i]; cout << "; "; } } else { for(int j = start; j <= end; j++){ swap(array, j, start); permutation_validate(array, start+1, end); swap(array, j, start); } }}
阅读全文
0 0
- 集合之全排列
- 集合的全排列
- 集合全排列问题
- 集合的全排列问题
- leetcode_permutaionu全排列集合_31_46_47_60
- 递归实现集合全排列
- 求集合的全排列
- 集合的全排列问题
- 递归之全排列
- 字串之全排列
- DFS之全排列
- 全排列之hash
- STL之全排列
- STL之全排列
- 排列组合之全排列
- 递归之全排列
- DFS之全排列
- DFS之全排列
- c++ 指针数组,数组指针
- php java static 不同
- echarts 折线图波动过大问题
- 关于华为mate9安装apk缺少证书的问题
- 断字符串是否相同,使用compare方法
- 集合之全排列
- Java常用数学函数总结及求数组的平均数、中位数和众数
- java使用axis2调用webservice接口实例
- 使用docker部署nginx容器
- jQuery $.post() 方法使用案例
- Redis集群相关操作(windows系统)
- 编辑器远程FTP连接
- Elasticsearch5.x安装IK分词器以及热词配置
- Android Ndk开发入门(实现静态注册,动态注册)