প্রথম পজিশনে থাকা ক্যারেক্টার খুঁজে বের করুন এবং বাকি ক্যারেক্টারগুলো প্রথম ক্যারেক্টারসহ সোয়াপ করুন। যেমন ABC-এ, প্রথম ইটারেশনে তিনটি স্ট্রিং তৈরি হয়: ABC, BAC, এবং CBA - A-tকে A, B এবং C-এর সাথে সোয়াপ করে। বাকি ক্যারেক্টারের জন্য এই ধাপটি পুনরাবৃত্তি করুন যেমন দ্বিতীয় ক্যারেক্টার B ফিক্স করে ইত্যাদি। আবার সোয়াপ করে আগের পজিশনে ফিরে যান। ABC থেকে, B ফিক্স করে আবার ABC তৈরি হয়, এবং আমরা ব্যাকট্র্যাক করে আগের পজিশনে আসি এবং B-tকে 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