সমস্যাটিকে ছোট এবং সহজ "সাবপ্রব্লেম"-এ ভাগ করা যায়, যেগুলো আবার আরও ছোট সাবপ্রব্লেমে ভাগ করা যায়। আমরা প্রতিটি ডিজিট একে একে নিয়ে সেটি থেকে পৌঁছানো যায় এমন সব n-ডিজিট গণনা করি, প্রতিটি ডিজিট থেকে পৌঁছানো যায় এমন ডিজিটের ম্যাপিং সংরক্ষণের জন্য একটি ম্যাপ ব্যবহার করি। যখন ডিজিট n-ডিজিট হয়, তখন কাউন্ট আপডেট করি।
উদাহরণ
using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
public class BackTracking
{
private string GetKeyPadValueBasedOnInput(string digit)
{
Dictionary<string, string> keypad = new Dictionary<string, string>();
keypad.Add("2", "abc");
keypad.Add("3", "def");
keypad.Add("4", "ghi");
keypad.Add("5", "jkl");
keypad.Add("6", "mno");
keypad.Add("7", "pqrs");
keypad.Add("8", "tuv");
keypad.Add("9", "wxyz");
return keypad.GetValueOrDefault(digit);
}
public void FindSequence(string currentList, string digits, List<string> output)
{
if (digits.Length == 0)
{
output.Add(currentList);
return;
}
else
{
string digit = digits.Substring(0, 1);
string letters = GetKeyPadValueBasedOnInput(digit);
for (int i = 0; i < letters.Length; i++)
{
char letter = GetCharFromString(letters, i);
FindSequence(currentList + letter, digits.Substring(1), output);
}
}
}
private char GetCharFromString(string letters, int value)
{
char[] charArr = letters.ToCharArray();
return charArr[value];
}
}
class Program
{
static void Main(string[] args)
{
BackTracking b = new BackTracking();
List<string> output = new List<string>();
b.FindSequence("", "34", output);
foreach (var item in output)
{
Console.WriteLine(item);
}
}
}
}
আউটপুট
dg dh di eg eh ei fg fh fi