[Algorithme de retour en arrière] Scénarios et modèles d'application de retour en arrière

L'essence du retour en arrière est exhaustive, en épuisant toutes les possibilités, puis en sélectionnant la réponse souhaitée. Si vous souhaitez rendre la méthode de retour en arrière plus efficace, vous pouvez ajouter quelques opérations d'élagage, mais l'essence de la méthode de retour en arrière ne peut pas être modifiée.

Problèmes résolus par le retour en arrière

La méthode de backtracking peut généralement résoudre les problèmes suivants :

  • Problème de combinaison : Trouver un ensemble de k nombres à partir de N nombres selon certaines règles.
  • Problème de coupe : Il existe plusieurs manières de couper une corde selon certaines règles.
  • Problème de sous-ensemble : combien de sous-ensembles qualifiés y a-t-il dans un ensemble de N nombres.
  • Problème d'arrangement : N nombres sont classés selon certaines règles, et il existe plusieurs façons de les organiser.
  • Problèmes de tableau : N Queens, résolution de Sudoku, et plus encore.

Comprendre le retour en arrière

Les problèmes résolus par la méthode de backtracking peuvent être résumés dans une structure arborescente. Étant donné que la méthode de retour en arrière consiste à rechercher de manière récursive des sous-ensembles dans l'ensemble, la taille de l'ensemble constitue la largeur de l'arbre, la profondeur de la récursion et la profondeur de l'arbre. La récursivité doit avoir une condition de terminaison, il doit donc s'agir d'un arbre de hauteur limitée (arbre N-aire).

Modèle de rétrospective en trois étapes

  • La valeur de retour et les paramètres du modèle de fonction de retour en arrière
    La valeur de retour de la fonction dans l'algorithme de retour en arrière est généralement nulle
void backtracking(参数)
  • La condition de fin de la fonction de retour en arrière
    est visible dans l'arborescence.D'une manière générale, si le nœud feuille est trouvé, une réponse qui remplit la condition est trouvée, la réponse est stockée et la récursion à ce niveau se termine.
if (终止条件) {
    
    
    存放结果;
    return;
}
  • Le processus de parcours de recherche par backtracking
    La méthode de backtracking effectue généralement une recherche récursive dans la collection. La taille de la collection constitue la largeur de l'arborescence et la profondeur de la récursion constitue la profondeur de l'arborescence.
    insérer la description de l'image ici
// for循环就是遍历集合区间,可以理解一个节点有多少个孩子,这个for循环就执行多少次。(横向遍历)
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
    
    
    处理节点;
    backtracking(路径,选择列表); // 递归(纵向遍历)
    回溯,撤销处理结果
}

Cadre de modèle d'algorithme de retour en arrière

void backtracking(参数) {
    
    
    if (终止条件) {
    
    
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
    
    
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_44033208/article/details/132402744
conseillé
Classement