zoukankan      html  css  js  c++  java
  • 对N各集合中的任意元素进行排列组合问题

    小李去市场买菜,有蔬菜(茄子、黄瓜、大白菜...等k中素菜),和肉类(牛肉,羊肉,鸡肉...等m种荤菜),及点心(麻饼,桃酥,枣花...等n中点心),现在老婆要求每天一荤一素一点心 并且每天的样式要尽可能不重复,这样子有多少中买菜的方案。

    问题转化为排列组合问题就是,已知存在N个集合S1、S2.....Sn,每个集合各有m1、m2......mn各元素。依次有序从各个集合当中任意取一个元素,生成集合取样的全排列。

    使用递归算法进行实现:


    <span style="font-size:18px;">package optmize;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Permutate {
    	/**保存生成的排列组合内容**/
    	public List<String> Permutation = new ArrayList<String>();
    	/**
    	 * 递归的方式计算排列组合
    	 * @param list  传入list.size()个集合
    	 * @param preStr 上一步递归中生成的排列组合
    	 * @return
    	 */
    	public  void permutation( List<List<String>> list,String preStr) {
    		   int size = list.size();
    		   if(1==size){
    		      for(int i=0; i<list.get(0).size(); i++) {
    		         Permutation.add(preStr + list.get(0).get(i));
    		      }
    		   }
    		   else{
    		      List<String> permu = new ArrayList<String>(list.get(0));
    		      List<List<String>> now = new ArrayList<List<String>>(list);
    		      now.remove(0);
    		      for(int i=0; i<permu.size(); i++){
    		         permutation(now, preStr +permu.get(i));
    		      }
    		   }
    		}
    	
    	public static void main(String[] args) throws Exception { 
    		List<List<String>> list = new ArrayList<List<String>>();
    		List<String> SET1 = new ArrayList<String>();
    		SET1.add("茄子");
    		SET1.add("大白菜");
    		List<String> SET2 = new ArrayList<String>();
    		SET2.add("牛肉");
    		SET2.add("羊肉");
    		List<String> SET3 = new ArrayList<String>();
    		SET3.add("桃酥");
    		SET3.add("麻饼");
    		list.add(SET1);
    		list.add(SET2);
    		list.add(SET3);
    		
    		Permutate permutate = new Permutate();
    		permutate.permutation(list,"");
    		System.out.println(permutate.Permutation);
    	}
    
    }</span>
    


  • 相关阅读:
    CSS媒体查询
    搜索关键词标注红色
    揭秘 | 小白如何0基础0元建站
    细说浏览器输入URL后发生了什么
    js问题总结
    vue elementui如何修改el-table头部样式
    h5开发微信公众号重定向到关注页面没有关注按钮 (微信你个坑)
    下拉展开动画
    html中常用的转义字符总结
    9个设计师常用的高清图库 不敢配图? 这9个免版权图库牢记心中!
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205045.html
Copyright © 2011-2022 走看看