前言:
问题描述:
有n个相同的球,m个盒子(编号为1,2,……m),将这n个球放入这m个盒子中,要求输出所有可能的放置方法,输出格式为二维数组(如下例子),每行对应每个可能性,每列对应每个盒子中的球数。
例如:3个球,5个盒子,可能的放法有:
30000
21000
11100
10101
……等
原问题来源:
写了个C++回溯法
#include<iostream>
using namespace std;
void Select(int i,int j,const int m,int *x,int &num){//i为第i个盒子。0<=i<=m-1。j是剩余球数。x为放置球的解法,num可有可无,记录放置的方法数目。
if (i > m)
return;
if (j == 0){
num++;
cout << "x可行序列为 : (";
for (int i = 0; i < m; i++){
cout << x[i];
if (i != m - 1)
cout << ",";
else
cout << ")" <