如何通过使用 C# 回溯从给定数组中找到不同的子集?
不同子集问题为我们提供了与给定数组不同的组合。
当目标为2时,从数组中取出所有对应于数字2的组合,当目标为3时,则从数组中取出对应于计数3的所有组合。在下面的例子中,数组是[1,2,3],目标是2。所以,我们取对应于数字2“1,2”,“2,3”,“1,3””的所有组合。
示例
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
public class BackTracking{
public void Subsets(int[] array){
List currentList = new List();
List results = new List();
BackTrackkingCombination(array, 2, 0, currentList, results);
foreach (var item in results){
StringBuilder s = new StringBuilder();
foreach (var item1 in item){
s.Append(item1.ToString());
}
Console.WriteLine(s);
s = null;
}
}
public void BackTrackkingCombination(int[] array, int size, int startIndex, List currentList, List results){
if (currentList.Count == size){
StringBuilder s = new StringBuilder();
foreach (var item in currentList){
s.Append(item);
}
results.Add(s.ToString());
return;
}
for (int i = startIndex; i < array.Length; i++){
currentList.Add(array[i]);
BackTrackkingCombination(array, size, i + 1, currentList, results); ;
currentList.Remove(array[i]);
}
}
}
class Program{
static void Main(string[] args){
BackTracking b = new BackTracking();
int[] arrs = { 1, 2, 3 };
b.Subsets(arrs);
}
}
} 输出结果12 13 23