zoukankan      html  css  js  c++  java
  • 穷举所有排列情况算法实现

    现实问题:测试多个参数不同的组合情况对结果的影响

    算法示例:

    输入: A,B,C,D

    输出:

    A

    A,B

    A,B,C

    A,B,C,D

    A,C

    A,C,D

    A,D

    B

    B,C

    B,C,D

    B,D

    C

    C,D

    D

    算法实现逻辑:

    对于每个元素来说,所做的工作就是要找到该元素能够组合的情况,所以这里直接递归寻找每个元素的组合。

    由于这里不需要加上排列条件,按顺序从前往后找就不会有重复的情况了。

    代码:

    static void Main(string[] args)
    {
      var xcolnames = new List < string > { "A", "B", "C", "D"};
      var paramGroup = new List<string>();
      for (var i = 0; i < xcolnames.Count; i++) {
        paramGroup.Add(xcolnames[i]);
        Console.WriteLine(xcolnames[i]);
        FindPartner(i, new List<string>(), xcolnames, ref paramGroup);
      }
    }
    private static void FindPartner(int self, List<string> head, List<string> data, ref List<string> result)
    {
      for (var i = self + 1; i < data.Count; i++) {
        //找到就加入并输出
        var cresult = new List<string>(head.ToArray());
        cresult.Add(data[self]);
        cresult.Add(data[i]);
    
        result.Add(string.Join("+", cresult));
        Console.WriteLine(string.Join("+", cresult));
    
        //克隆之前的搭档
        var headclone = new List<string>(head.ToArray());
        headclone.Add(data[self]);
        FindPartner(i, headclone, data, ref result);
      }
    }
    

      

  • 相关阅读:
    MoveWindow() SetWindowPos()的区别与联系
    SEO搜索引擎优化基础
    Windows核心编程小结1
    STL学习笔记8 -- 函数对象
    Java关于反射
    多线程处理慢sql查询小笔记~
    前端小菜鸡使用Vue+Element笔记(二)
    前端小菜鸡使用Vue+Element笔记(一)
    Hive/hbase/sqoop的基本使用教程~
    Hive/Hbase/Sqoop的安装教程
  • 原文地址:https://www.cnblogs.com/lycnblogs/p/9111565.html
Copyright © 2011-2022 走看看