首页 > 代码库 > POJ 3187 Backward Digit Sums
POJ 3187 Backward Digit Sums
题目链接: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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。