zoukankan      html  css  js  c++  java
  • 求一个数组元素的所有排列组合

    public int func(int[] array,int[][] result){
    	//array为要组合的数组,size为长度,firstIndex为要放在所以组合最前面的元素,result保存所有组合,每一行为一个组合
    	//所有递归的结果都保存在result中,并且最低层的组合结果保存在最后列
    	//返回本次递归组合的个数
    	int size = array.cols;
    	if(size==0)//如果没有元素,不再向下递归
    		return 0;
    	int num = 0;//本层递归的总组合数
    	int subnum = 0;//本层每个元素作为头元素,其他元素的组合个数(递归返回)
    	for(int i=0;i<size;i++){
    		int[] newArray = new int[size-1];
    		for(int j=0,k=0;j<size;j++){//获取待排序子数组
    			if(j!=i)
    				newArray[k++]=array[j];
    		}
    			
    		subnum=func(newArray,result);//递归,对后面的子数组组合,并返回以array[i]开头的组合数
    		num+=subnum;
    		//将组合好的所有新数组中的每个组合放在array[i]后面,构成本层的组合,保存到数组中
    		int j = result.rows-subnum;//表示本次组合的结果从哪行开始插入,result.rows表示数组已有行数
    		while(j<result.rows)
    			result[j++][result.cols-size] = array[i];//将头元素加上
    	}
    	return num;
    }


     

  • 相关阅读:
    [BZOJ3172]单词
    [BZOJ2434]阿狸的打字机
    [BZOJ1195]最短母串
    [codeforces743E]Vladik and cards
    [BZOJ2553]禁忌
    [BZOJ1009]GT考试
    [BZOJ3507]通配符匹配
    [BZOJ4027]兔子与樱花
    test20190308
    Luogu P2742 模板-二维凸包
  • 原文地址:https://www.cnblogs.com/james1207/p/3263262.html
Copyright © 2011-2022 走看看