题目链接:http://poj.org/problem?id=3187
解析:
全排列基础问题
可以使用DFS,也可以使用STL中的next_permutation函数生成全排列
这里给出DFS的方法
代码:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define PI 3.1415926
bool visit[15];
int a[15],b[15];
int N, sum;
bool per(int k){
if(k == (N+1)){
int i,j;
for(i=1; i<=N; ++i)
b[i] = a[i];
for(i=1; i<N; ++i){
for(j=1; j<=N-i; ++j){
b[j] = b[j]+b[j+1];
}
}
if(b[1] == sum){
for(i=1; i<=N; ++i)
printf("%d ", a[i]);
printf("\n");
return true;
}
return false;
}
int i;
for(i=1; i<=N; ++i){
if(!visit[i]){
visit[i] = true;
a[k] = i;
if(per(k+1))
return true;
visit[i] = false;
}
}
return false;
}
int main(){
#ifdef LOCAL
freopen("1.in","r", stdin);
#endif
while(~scanf("%d%d", &N, &sum)){
memset(visit, false, sizeof(visit));
per(1);
}
return 0;
}