自然数的拆分(DFS)
Posted yfbing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然数的拆分(DFS)相关的知识,希望对你有一定的参考价值。
题目描述:
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
输入格式:
待拆分的自然数n。
输出格式:
若干数的加法式子。
样例输入:
7
样例输出:
1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+2+2 1+2+4 1+3+3 1+6 2+2+3 2+5 3+4
详细的都在代码里了,自己看吧。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[41],s; 4 void print(int s) { 5 for(int i=1;i<=s-2;i++)printf("%d+",a[i]); 6 printf("%d ",a[s-1]); 7 } 8 void search(int n,int s,int pre){ 9 if(n==0 && s>2){ 10 print(s);//打印 11 return;//返回 12 } 13 for(int i=pre;i<=n;i++){ 14 a[s]=i;//每一种 15 search(n-i,s+1,i);//类似于递归,搜索下一种可能,若放满则打印 16 } 17 } 18 int main(){ 19 int n; 20 cin>>n; 21 search(n,1,1); 22 return 0; 23 }
以上是关于自然数的拆分(DFS)的主要内容,如果未能解决你的问题,请参考以下文章