ปัญหาสามารถแบ่งออกเป็น "ปัญหาย่อย" ที่เล็กกว่าและเรียบง่าย ซึ่งสามารถแบ่งออกเป็นปัญหาย่อยที่ง่ายกว่าและเล็กกว่าได้ เราใช้แต่ละหลักทีละตัวและนับ ndigits ทั้งหมดที่สามารถเข้าถึงได้จากหลักใด ๆ ใช้แผนที่เพื่อจัดเก็บการแมปของตัวเลขที่สามารถเข้าถึงได้จากทุกหลัก เมื่อตัวเลขกลายเป็น n หลัก ให้อัปเดตการนับ
ตัวอย่าง
using System; using System.Collections.Generic; namespace ConsoleApplication{ public class BackTracking{ private string GetKeyPadValueBasedOnInput(string digit){ Dictionary keypad = new Dictionary(); 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 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