Бэктрекинг (Backtracking) — это алгоритмическая техника поиска, которая перебирает возможные решения рекурсивно, откатываясь назад, если текущий путь не ведёт к успеху.
➖ Как работает бэктрекинг
1. Выбираем следующий шаг – пробуем одно из возможных решений.
2. Проверяем ограничение – если путь невозможен, откатываемся назад.
3. Продолжаем поиск – если решение найдено, фиксируем его и ищем другие варианты.
Пример кода — поиск всех перестановок строки
class Program
{
static void Permute(char[] arr, int l, int r)
{
if (l == r)
{
Console.WriteLine(new string(arr));
}
else
{
for (int i = l; i <= r; i++)
{
(arr[l], arr[i]) = (arr[i], arr[l]); // Обмен символами
Permute(arr, l + 1, r);
(arr[l], arr[i]) = (arr[i], arr[l]); // Откат назад
}
}
}
static void Main()
{
string str = "ABC";
Permute(str.ToCharArray(), 0, str.Length - 1);
}
}
➖ Где используется
• Генерация перестановок и комбинаций – подбор паролей, составление расписаний.
• Задача N ферзей – расстановка фигур без угрозы друг другу.
• Поиск пути в лабиринте – навигация в сложных структурах.
• Разбор выражений и парсинг – обработка кода и регулярных выражений.
🤔 Использовали ли вы бэктрекинг в реальных проектах? Делитесь опытом в комментариях! 👇
🐸Библиотека шарписта
