全排列,组合问题

(1)全排列问题

 1 //全排列的两种方法
 2 #include <iostream>
 3 using namespace std;
 4
 5 //方法一,采用swap方法
 6 void quanpailie(char * A,int first,int n)
 7 {
 8     if(A==NULL)
 9     {
10         cout<<"A is NULL"<<endl;
11         return;
12     }
13     if(n<=1)
14     {
15         cout<<A<<endl;
16         return;
17     }
18     for(int i=first;i<first+n;i++)
19     {
20         swap(A[i],A[first]);
21         quanpailie(A,first+1,n-1);
22         swap(A[i],A[first]);
23     }
24     return;
25 }
26
27 //采用字典序全排序,就是采用的字典排序思想,从后向前找出第一个A[i]<A[i+1],如果没有就说明结束,
28 //然后在从右向左找出第一个大于A[i]的,进行交换,然后逆序i+1到最后(也就是逆序j到最后)。
29 void quanpailie2(char * A,int n)
30 {
31     cout<<A<<endl;              //输出最开始的“abc”
32     if(A==NULL||n<=0)
33         return;
34     while(true)
35     {
36         int i;
37         for(i=n-2;i>=0;i--)
38         {
39             if(A[i]<A[i+1])
40                 break;
41         }
42         if(i<0)
43         {
44             break;
45         }
46         for(int k=n-1;k>=0;k--)
47         {
48             if(A[k]>A[i])
49             {
50                 swap(A[i],A[k]);
51                 break;
52             }
53         }
54         reverse(A+i+1,A+n);
55         cout<<A<<endl;
56     }
57 }
58
59 int main()
60 {
61     char A[]="1234";
62     //quanpailie(A,0,4);
63     quanpailie2(A,4);
64     system("pause");
65 }

(2)组合问题

。。。。。

全排列,组合问题

时间: 2024-10-21 15:45:11

全排列,组合问题的相关文章

Java 实现m个数全排列组合以及从M中选取N个数(有序)

(1)全排列组合的递归规律: 集合s的全排列组合 all(s)=n+all(s-n);其中n为已经取出的集合 以集合 s={1,2,3}为例,则s的全排列组合为all(s)={1}+all({2,3});其中n={1},s-n={2,3} 通过以上例子,我们可以知道上述算法可以用递归来解决. 我们取极端情况,如果集合s为空,那么说明不需要再进行递归. 全排列组合,如果集合有4个元素,则全排列组合的个数为 A(4,4)=4*3*2*1=24种,代码如下: package dataStructer;

(转)C#全排列组合算法

全排列组合算法方法: public static List<List<T>> FullCombination<T>(List<T> lstSource){ var n = lstSource.Count; var max = 1 << n;//1乘以2的n次方 var lstResult = new List<List<T>>(); for (var i = 0; i < max; i++) { var lstTem

分治法实现1-N的数字按字典序全排列组合 Java语言

package 分治法; import java.util.Arrays; /* * 将数字 1 - n进行全排列 按字典序从小到大输出 * 如 1 - 3 * 123 132 213 231 312 321 */ class GenerateP{ private int n; // 求 1-n所有数字的全排列 private final int maxn = 110;//最多可排列组合的长度 1-100 private boolean [] hashTable; private int []

js 数组全排列组合算法

function doCombination(arr) { var count = arr.length - 1; //数组长度(从0开始) var tmp = []; var totalArr = [];// 总数组 return doCombinationCallback(arr, 0);//从第一个开始 //js 没有静态数据,为了避免和外部数据混淆,需要使用闭包的形式 function doCombinationCallback(arr, curr_index) { for(val of

递归实现全排列(一)

[思路] 下面用具体例子来阐述这种实现的思路,例如实现123的全排列组合. 要求123的全排列,可以分为以下情况: 情况1:第0位为1+23的全排列 情况2:第0位为2+13的全排列 情况3:第0位为3+32的全排列 上面的情况用代码实现如下: //情况1 //为了跟下面一致,加上swap(list[0],list[0]); perm(list,1,2); //为了跟下面一致,加上swap(list[0],list[0]); //情况2 swap(list[0],list[1]); perm(l

排列组合问题

一.不同元素子集问题 78. Subsets Given a set of distinct integers, nums, return all possible subsets. 给定一组非重复数字,求出所有可能的子集 解析: 例如 [1,2,3],解法: 首先放[],然后往已有的[]中放1 1. 首先放1 此时已有[ [], 1 ] 2. 然后对[ [], 1 ] 放2 于是此时有 [ [], [1], [2], [1,2] ] 3. 然后对[ [], [1], [2], [1,2] ]

LeetCode 47 Permutations II(全排列)

题目链接: https://leetcode.com/problems/permutations-ii/?tab=Description 给出数组,数组中的元素可能有重复,求出所有的全排列 使用递归算法: 传递参数 List<List<Integer>> list, List<Integer> tempList, int[] nums, boolean[] used 其中list保存最终结果 tempList保存其中一个全排列组合 nums保存初始的数组 used随着计

字符串全排列 java实现

经常会遇到字符串全排列的问题.例如:输入为{'a','b','c'},则其全排列组合为abc,acb,bac,bca,cba,cab.对于输入长度为n的字符串数组,全排列组合为n!种. package Bayes; public class RecursionTree { public static void permutation(char[] s,int from,int to) { if(to<=1) { return; } if(from ==to) { System.out.print

考题一:研究对全排列着色的性质 问题 A: 首先需要生成 n 的全排列然后对 n 的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开. (这里相邻包含两层含义:同时在自然

问题: (用C++实现)     **研究对全排列着色的性质. 首先需要生成n的全排列 然后对n的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开.  (这里相邻包含两层含义:同时在自然顺序和在当前排列的顺序中) 最后, 对着色的结果进行统计 结果需要 给定n,找出所有需要2种颜色的排列. 需要3种颜色的排列 需要4种颜色的排列 (已经证明最多只需要4色) (在第一问基础上)第二问: 需要找出需要4色的规律. 发现需要 4色的排列里面 有一些可以用以下个模型来表示(

利用标准库算法求解排列组合

以前求序列的排列时,最常用的方法就是递归回溯,现在发现其实像这样有特定算法的重复性工作是可以在STL标准库中找到答案的. 在STL的变序性算法中,有两个用于排列元素的算法分别如下: bool next_permutation(Iterator beg,Iterator end) bool prev_permutation(Iterator beg,Iterator end) 这两个算法的功能也很简单,next_permutation()会改变区间(beg,end)内的元素次序,使它们符合"下一个