1. 程式人生 > >回溯法:求和

回溯法:求和

要求 int 示例 push UNC mes std include class

題目描述

輸入兩個整數 n 和 m,從數列1,2,3.......n 中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來

輸入描述:

每個測試輸入包含2個整數,n和m

輸出描述:

按每個組合的字典序排列輸出,每行輸出一種組合
示例1

輸入

5 5

輸出

1 4
2 3
5

#include<iostream>
#include<vector>
using namespace std;
void func(int n,int m,vector<int>&result,int beg)
{
    if(m==0)
    {
        for(int i=0;i<result.size();i++)
        {
            i==0?cout<<result[i]:cout<<" "<<result[i];
        }
        cout<<endl;
    }
    for(int i=beg;i<=n&&i<=m;i++)
    {
        result.push_back(i);
        func(n,m-i,result,i+1);
        result.pop_back();
    }
}
int main()
{
    int n,m;
    cin>>n>>m;
    vector<int>result;
    func(n,m,result,1);
    return 0;
}

  

回溯法:求和