题目链接: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; }
POJ 3187 Backward Digit Sums,布布扣,bubuko.com
原文:http://blog.csdn.net/mullerwch/article/details/38392961