问题描述
求算法,一个n长度的数组,要将数组分成n个组每个组将数组中的所有元素分成m份,且不能重复出现(m的值等于组号即第几组就是分几份,不考虑排序)如数组,List<int>arr=newList<int>{1,2,3};要分成3个组,第一个组和n个组是固定的第1个组将数组分成1份,即vargroup=newList<List<int>>{newList<int>{1,2,3}};第2个组把数组中所有元素分成2份,可能出现以下的分法:1、vargroup1=newList<List<int>>{newList<int>{1},newList<int>{2,3}};2、vargroup2=newList<List<int>>{newList<int>{1,2},newList<int>{3}};3、vargroup3=newList<List<int>>{newList<int>{1,3},newList<int>{2},};第n个组所所有元素分成n份即每个元素都独立为一份vargroup=newList<List<int>>{newList<int>{1},newList<int>{2},newList<int>{3},};
解决方案
解决方案二:
然后,什么算法?
解决方案三:
不能组合成有固定字符分隔的字符串,然后按照需要,获取,这样不是更好?
解决方案四:
http://ask.csdn.net/questions/178996
解决方案五:
引用3楼caozhy的回复:
http://ask.csdn.net/questions/178996
非常感谢,但这种方式好像还是无法实现我的要求,如{12345}划分成2个:除了这几种外1,234512,345123,451234,5还可能有:13,245134,25135,2414,235142,35....
解决方案六:
坐等高人来。
解决方案七:
等高手解答!
解决方案八:
引用4楼doveph的回复:
非常感谢,但这种方式好像还是无法实现我的要求,如{12345}划分成2个:除了这几种外1,234512,345123,451234,5还可能有:13,245134,25135,2414,235142,35....
这不就是先完成排列组合,再去做分组吗
解决方案九:
可以这样写staticvoidMain(string[]args){int[]a={1,2,3,4,5};varAs=AllocationScheme(a.Length,2);//获取分配方案do{foreach(varfinAs){intn=0;for(inti=0;i<f.Length;i++){vart=newint[f[i]];Array.Copy(a,n,t,0,f[i]);n+=f[i];Console.Write("[{0}]",string.Join(",",t));}Console.Write("");}Console.WriteLine("");}while(NextPermutation(a));//取得下一个排列}staticList<int[]>AllocationScheme(intm,intn){varres=newList<int[]>();if(n>m)returnres;vara=newint[n];inti=0;for(i=0;i<a.Length;i++)a[i]=1;a[0]+=m-n;res.Add((int[])a.Clone());i=0;while(i<a.Length-1){do{a[i]--;a[i+1]++;if(a[i]>=a[i+1]){res.Add((int[])a.Clone());}}while(a[i]>=a[i+1]);varj=i++;while(j>=0&&a[j--]==1)i=a.Length;}returnres;}staticboolNextPermutation(int[]a){intfirst=0;intlast=a.Length;intc,j,m,n;inti=last;i--;while(true){vart=i;i--;if(a[i]<a[t]){j=last;while(!(a[i]<a[--j]));c=a[i];a[i]=a[j];a[j]=c;m=t;n=last-1;while(m<n){c=a[n];a[n]=a[m];a[m]=c;m++;n--;}returntrue;}if(i==first){m=first;n=last-1;while(m<n){c=a[n];a[n]=a[m];a[m]=c;m++;n--;}returnfalse;}}}
[1,2,3,4][5][1,2,3][4,5][1,2,3,5][4][1,2,3][5,4][1,2,4,3][5][1,2,4][3,5][1,2,4,5][3][1,2,4][5,3][1,2,5,3][4][1,2,5][3,4][1,2,5,4][3][1,2,5][4,3][1,3,2,4][5][1,3,2][4,5][1,3,2,5][4][1,3,2][5,4][1,3,4,2][5][1,3,4][2,5][1,3,4,5][2][1,3,4][5,2][1,3,5,2][4][1,3,5][2,4][1,3,5,4][2][1,3,5][4,2][1,4,2,3][5][1,4,2][3,5][1,4,2,5][3][1,4,2][5,3][1,4,3,2][5][1,4,3][2,5][1,4,3,5][2][1,4,3][5,2][1,4,5,2][3][1,4,5][2,3][1,4,5,3][2][1,4,5][3,2][1,5,2,3][4][1,5,2][3,4][1,5,2,4][3][1,5,2][4,3][1,5,3,2][4][1,5,3][2,4][1,5,3,4][2][1,5,3][4,2][1,5,4,2][3][1,5,4][2,3][1,5,4,3][2][1,5,4][3,2][2,1,3,4][5][2,1,3][4,5][2,1,3,5][4][2,1,3][5,4][2,1,4,3][5][2,1,4][3,5][2,1,4,5][3][2,1,4][5,3][2,1,5,3][4][2,1,5][3,4][2,1,5,4][3][2,1,5][4,3][2,3,1,4][5][2,3,1][4,5][2,3,1,5][4][2,3,1][5,4][2,3,4,1][5][2,3,4][1,5][2,3,4,5][1][2,3,4][5,1][2,3,5,1][4][2,3,5][1,4][2,3,5,4][1][2,3,5][4,1][2,4,1,3][5][2,4,1][3,5][2,4,1,5][3][2,4,1][5,3][2,4,3,1][5][2,4,3][1,5][2,4,3,5][1][2,4,3][5,1][2,4,5,1][3][2,4,5][1,3][2,4,5,3][1][2,4,5][3,1][2,5,1,3][4][2,5,1][3,4][2,5,1,4][3][2,5,1][4,3][2,5,3,1][4][2,5,3][1,4][2,5,3,4][1][2,5,3][4,1][2,5,4,1][3][2,5,4][1,3][2,5,4,3][1][2,5,4][3,1][3,1,2,4][5][3,1,2][4,5][3,1,2,5][4][3,1,2][5,4][3,1,4,2][5][3,1,4][2,5][3,1,4,5][2][3,1,4][5,2][3,1,5,2][4][3,1,5][2,4][3,1,5,4][2][3,1,5][4,2][3,2,1,4][5][3,2,1][4,5][3,2,1,5][4][3,2,1][5,4][3,2,4,1][5][3,2,4][1,5][3,2,4,5][1][3,2,4][5,1][3,2,5,1][4][3,2,5][1,4][3,2,5,4][1][3,2,5][4,1][3,4,1,2][5][3,4,1][2,5][3,4,1,5][2][3,4,1][5,2][3,4,2,1][5][3,4,2][1,5][3,4,2,5][1][3,4,2][5,1][3,4,5,1][2][3,4,5][1,2][3,4,5,2][1][3,4,5][2,1][3,5,1,2][4][3,5,1][2,4][3,5,1,4][2][3,5,1][4,2][3,5,2,1][4][3,5,2][1,4][3,5,2,4][1][3,5,2][4,1][3,5,4,1][2][3,5,4][1,2][3,5,4,2][1][3,5,4][2,1][4,1,2,3][5][4,1,2][3,5][4,1,2,5][3][4,1,2][5,3][4,1,3,2][5][4,1,3][2,5][4,1,3,5][2][4,1,3][5,2][4,1,5,2][3][4,1,5][2,3][4,1,5,3][2][4,1,5][3,2][4,2,1,3][5][4,2,1][3,5][4,2,1,5][3][4,2,1][5,3][4,2,3,1][5][4,2,3][1,5][4,2,3,5][1][4,2,3][5,1][4,2,5,1][3][4,2,5][1,3][4,2,5,3][1][4,2,5][3,1][4,3,1,2][5][4,3,1][2,5][4,3,1,5][2][4,3,1][5,2][4,3,2,1][5][4,3,2][1,5][4,3,2,5][1][4,3,2][5,1][4,3,5,1][2][4,3,5][1,2][4,3,5,2][1][4,3,5][2,1][4,5,1,2][3][4,5,1][2,3][4,5,1,3][2][4,5,1][3,2][4,5,2,1][3][4,5,2][1,3][4,5,2,3][1][4,5,2][3,1][4,5,3,1][2][4,5,3][1,2][4,5,3,2][1][4,5,3][2,1][5,1,2,3][4][5,1,2][3,4][5,1,2,4][3][5,1,2][4,3][5,1,3,2][4][5,1,3][2,4][5,1,3,4][2][5,1,3][4,2][5,1,4,2][3][5,1,4][2,3][5,1,4,3][2][5,1,4][3,2][5,2,1,3][4][5,2,1][3,4][5,2,1,4][3][5,2,1][4,3][5,2,3,1][4][5,2,3][1,4][5,2,3,4][1][5,2,3][4,1][5,2,4,1][3][5,2,4][1,3][5,2,4,3][1][5,2,4][3,1][5,3,1,2][4][5,3,1][2,4][5,3,1,4][2][5,3,1][4,2][5,3,2,1][4][5,3,2][1,4][5,3,2,4][1][5,3,2][4,1],[5,3,4,1][2][5,3,4][1,2][5,3,4,2][1][5,3,4][2,1][5,4,1,2][3][5,4,1][2,3][5,4,1,3][2][5,4,1][3,2][5,4,2,1][3][5,4,2][1,3][5,4,2,3][1][5,4,2][3,1][5,4,3,1][2][5,4,3][1,2][5,4,3,2][1][5,4,3][2,1]
这是用排列做的,可能你需要的是组合[5,3,4,1][2]和[5,4,3,1][2][5,4,3][1,2]和[5,4,3][2,1]都算一组不过你没说