全排列的实现
来源:互联网 发布:btsow新域名 编辑:程序博客网 时间:2024/05/17 07:49
DFS实现
直接以题目为例:
来源:洛谷P1036
题目描述
从n个数中选出k个数并求和,判断所有的和为素数的个数
//void dfs(int pos, int pps, int sum)//pos:还需pos个数才能凑够k个数//sum:当前k-pos个数的和//pps:当前k-pos个数 的最后一个数 的下一个数#include<iostream>using namespace std;int a[30];int ans = 0;int n, k;int is_prime(int p){ int i; if(p == 2) return 1; for(i = 2; i * i <= p; i++) if(p%i == 0) return 0; return 1;}void dfs(int pos, int pps, int sum){ if(!pos){ ///pos==0 意味着已选够k个数了,判断这k个数的和是否为素数 ans += is_prime(sum); return; } for(pps; pps < n; pps++) dfs(pos-1, pps+1, sum+a[pps]); ///递归dfs 所需数的个数少1 其中pps+1是a[pps]的下一个}int main(){ cin >> n >> k; int i; for(i = 0; i < n; i++) cin >> a[i]; dfs(k,0,0); ///需要选k个数 从第0个数开始选 当前数的和为0 cout << ans << endl; return 0;}
库函数实现——next_permutation()
头文件:algorithm
函数定义:bool next_permutation(iterator begin, iterator end);
//每调用一次将会对s[ ]进行一次重新排列#include <iostream>#include <algorithm>#include <cstring>using namespace std;char s[500];int main(){ cin >> s; sort(s, s+strlen(s)); do { cout << s << endl; }while(next_permutation(s, s + strlen(s))); return 0;}
阅读全文
0 0
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- 全排列的实现
- Java实现的全排列和排列
- Java实现的全排列和排列
- 全排列的简单实现
- 全排列的一种实现
- 全排列的递归实现
- 全排列的递归实现
- 可复用的全排列实现
- 全排列的递归实现
- sscanf,sscanf_s及其相关用法
- 【区间DP】POJ_3186_Treats for the Cows
- 网页_HTML _JavaScript
- 数据库
- 4 如何对齐和层级排版
- 全排列的实现
- X控件实战总结
- 如何正确地写出单例模式
- sanlyShi的前端之路四:meta,关于手机端的参数
- H5+CSS3玩转骰子
- ajax如何实现页面局部跳转与结果返回
- Django的MVC架构(4)
- 最好理解的并查集详解
- __name__ == '__main__'讲解