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

C#을 사용하여 역추적하여 문자열의 모든 순열을 찾는 방법은 무엇입니까?

<시간/>

첫 번째 위치에서 문자를 찾고 나머지 문자를 첫 번째 문자로 바꿉니다. ABC와 마찬가지로 첫 번째 반복에서는 A를 A, B 및 C로 각각 교환하여 ABC, BAC 및 CBA의 세 가지 문자열이 형성됩니다. 두 번째 문자 B 고정 등과 같은 나머지 문자에 대해 단계를 반복합니다. 이제 다시 바꾸면 이전 위치로 돌아갑니다. ABC에서 B를 다시 고정하여 ABC를 구성하고 이전 위치로 되돌아가 B를 C로 바꿉니다. 이제 ABC와 ACB가 생겼습니다.

예시

using System;
namespace ConsoleApplication{
   public class BackTracking{
      public void StringPermutation(string word, int start, int end){
         if (start == end){
            Console.WriteLine(word);
         }
         else{
            for (int i = start; i <= end; i++){
               Swap(ref word, start, i);
               StringPermutation(word, start + 1, end);
               Swap(ref word, start, i);
            }
         }
      }
      private void Swap(ref string word, int start, int end){
         char[] arr = word.ToCharArray();
         char temp = arr[start];
         arr[start] = arr[end];
         arr[end] = temp;
         word = new string(arr);
      }
   }
   class Program{
      static void Main(string[] args){
         BackTracking b = new BackTracking();
         b.StringPermutation("ABC", 0, 2);
      }
   }
}

출력

ABC
ACB
BAC
BCA
CBA
CAB