15个球,6个位置,求按递增序列输出不同的摆法 DFS

贴代码:

View Code
 1 #include <cstdio>
 2 #define MAXN 160000
 3 int a[MAXN][6];
 4 int cur;
 5 int st[6];
 6 //表示要去第i个位置放球,还有sum个球没放
 7 void DFS(int i,int sum)
 8 {
 9     int j,k;
10     if(i==5)//放最后一个位置,那么直接把剩下的球都放在该位置上
11     {
12         st[i] = sum;
13         for(j=0; j<6; ++j)  //放数组里保存起来
14             a[cur][j] = st[j];
15         cur++;
16         return;
17     }
18     for(k=0; k<=sum; ++k)//不是最后一个位置,该位置能放0-sum个球
19     {
20         st[i] = k;  //让该位置放k个球
21         DFS(i+1,sum-k);//那么放剩下位置时候就只要放sum-k个球了
22     }
23 }
24 int main()
25 {
26     //freopen("out.cpp","w",stdout);
27     DFS(0,15);
28     for(int i=0; i<cur; ++i)//输出结果
29     {
30         printf("NO.%d   ",i);
31         for(int j=0; j<6; ++j)
32             printf("%d ",a[i][j]);
33         puts("");
34     }
35     return 0;
36 }

 

posted on 2013-04-12 10:49  allh123  阅读(329)  评论(0编辑  收藏  举报

导航