Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

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<int> currentList = new List<int>();
         List<string> results = new List<string>();
         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<int> currentList, List<string> 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