题记1|| 自然数的拆分
题目:
代码
#include <iostream>
using namespace std;
int sta[105];
int n, top = 0;
void dfs(int sum, int lst) {
if (sum > n) {
return ;
}
if (sum == n) {
for(int i = 1; i <= top; ++ i)
std::cout << sta[i] << " \n"[i == top];
return ;
}
for(int i = lst; i <= n - sum; ++ i)
sta[++ top] = i, dfs(sum + i, i), sta[top --] = 0;
return ;
}
int main(){
cin >> n;
dfs( 0, 1 );
return 0;
}
DFS过程中顺序的思考方式
将输出排序的方法
数组模拟栈的方法
输出方式的改进版如下
满足输出条件后的输出格式中
更精简的版本为:
cout << path[i] << "+/n"[i == top];
直接把"+/n"看作是一个明示的数组,第一个元素是加号,第二个元素是换行符。