排列算法
2015-07-14 22:54
363 查看
之前一直没有正儿八经写过排列算法,顶多就是把经过一些化妆后的排列算法作为一个子算法混在大算法里面,今天看书时突然发现排列算法的影子无处不在,TSP问题就是从众多排列中选出最佳排列的问题。下面是利用递归思想的排列算法代码,其中的visited数组有一个俗称叫“禁忌表”,另外调用递归函数之后一定不要忘了恢复“原貌”喔!
#include <cstdio> #include <vector> using namespace std; int cnt; void permutate(vector<int> &permutation, vector<bool> &visited, int cur, int n, int k) { if(cur == k) { for(int j = 0; j < cur; j++) { printf("%d ", permutation[j]); } printf("\n"); cnt++; return; } for(int i = 1; i <= n; i++) { if(!visited[i]) { visited[i] = true; permutation[cur] = i; permutate(permutation, visited, cur+1, n, k); visited[i] = false; } } } int main() { /* 从n个数中取k个数的排列 */ int n, k; scanf("%d%d", &n, &k); vector<int> permutation(n); vector<bool> visited(n+1, false); cnt = 0; permutate(permutation, visited, 0, n, k); printf("%d\n", cnt); return 0; }
相关文章推荐
- ios设备管理
- 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
- leetcode 102 Binary Tree Level Order Traversal
- sun.misc.BASE64Encoder找不到包,解决方法
- 五笔输入法总结
- Oracle数据库中分析函数的使用过程
- WebGoat安装与配置
- leetcode 102 Binary Tree Level Order Traversal
- 欢迎使用CSDN-markdown编辑器
- Spring MVC 国际化
- 2015/7/14
- leetcode 137 Single Number II
- 【Java】位运算的其他问题
- js_study
- 【架构设计】MVP与MVC,实现Android应用层开发
- 求一个二叉搜索树中第K个最小值
- 抽象类与接口学习小结
- Linux的SOCKET编程详解
- 轮换
- 手机玩召回 被逼急的厂商还能出哪些怪招