窮舉所有排列情況算法實現


現實問題:測試多個參數不同的組合情況對結果的影響

算法示例:

輸入: 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);
  }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM