您的位置:首页 > 其它

深度优先搜索 之 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;
}





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: