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 }