深度优先搜索 之 CODE[VS] 1294 全排列
2015-12-04 15:13
447 查看
/* 注意: 输入输出采用scanf、printf,防止TLE。 两种实现方法: (1)void Solve(int numPos, int isUsed); // dfs (2)void SolveWithSTL(); C++ STL 自带函数,可生成全排列 next_permutation( ), 详细文档:http://www.cplusplus.com/reference/algorithm/next_permutation/?kw=next_permutation */
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstddef> #include <iterator> #include <algorithm> #include <string> #include <locale> #include <cmath> #include <vector> #include <cstring> #include <map> #include <utility> #include <queue> #include <stack> #include <set> using namespace std; const int INF = -0x3f3f3f3f; const int MaxN = 55; const int modPrime = 3046721; int n; int arr[15]; void Solve(int numPos, int isUsed) { if (numPos == (n + 1)) { for (int i = 1; i <= n; ++i) { printf("%d ", arr[i]); } printf("\n"); } for (int i = 1; i <= n; ++i) { if (!(isUsed&(1 << i))) { arr[numPos] = i; Solve(numPos + 1, isUsed|(1 << i)); } } } void SolveWithSTL() { for (int i = 1; i <= n; ++i) { arr[i] = i; } do { for (int i = 1; i <= n; ++i) { printf("%d ", arr[i]); } printf("\n"); } while (next_permutation(arr + 1, arr + n + 1)); } int main() { #ifdef HOME freopen("in", "r", stdin); //freopen("out", "w", stdout); #endif scanf("%d", &n); //Solve(1, 0); SolveWithSTL(); #ifdef HOME cerr << "Time elapsed: " << clock() / CLOCKS_PER_SEC << " ms" << endl; _CrtDumpMemoryLeaks(); #endif return 0; }
相关文章推荐
- git clone: SSL certificate problem: unable to get local issuer certificate
- 安卓--安卓坐标系统
- Linux文件和目录属性
- Android 文本编辑中基准线的详细解释
- 委托(Delegates)示例
- Hadoop 调优 性能参数
- linux下单独线程启动
- 从今天开始—兄弟连IT教育
- 回到顶部效果
- js返回上一页的方法
- 开发者证书的创建
- HBase初探
- TCP/IP详解之:广播和多播
- 关于 try catch catch
- CSS3 flex布局之快速实现BorderLayout布局
- 成为一名更好的程序员:如何阅读源代码—兄弟连IT教育
- select让文字居中:有解
- vm虚拟机出现目标主机不支持CPUID的情况
- 在Hive中使用Avro
- 查看.a的信息