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);
      }
    }
    

      

  • 相关阅读:
    【建站经验】 一个成熟的大型网站系统架构演化之路
    Puppet 安装配置
    SHELL二十篇(读书笔记)
    LINUX常见小问题汇总
    shell eval命令使用
    javaweb三大框架SSH
    Java Web(八) MVC和三层架构
    在CMD中操作mysql数据库出现中文乱码解决方案
    编码与解码
    JSONP
  • 原文地址:https://www.cnblogs.com/lycnblogs/p/9111565.html
Copyright © 2011-2022 走看看