zoukankan      html  css  js  c++  java
  • 算法设计与分析——回溯法算法模板

    以深度优先方式系统搜索问题解的算法称为回溯法。在回溯法中,解空间树主要分为了四种子集树、排列树、n叉树和不确定树。

    在《算法设计与分析课本》中介绍了11个回溯法的问题样例,这里根据解空间树的类型做一个分类。

    子集树

    装载问题

    符号三角形问题

    0-1背包问题

    最大团问题

    算法模板:

    void backtrack(int t)
    {
        if(搜索到叶子结点)
        {
            return;
        }
        for(i=0; i<=1; i++) //01二叉树
        {
            if(满足约束函数和限界函数)//剪枝
            {
                backtrack(t+1);
            }
        }
    }

    排列树

    批处理作业调度

    旅行售货员问题

    圆排列问题

    电路板排列问题

    算法模板:

    void backtrack(int t)
    {
        if(搜索到叶子结点)
        {
            return;
        }
        for(i=0; i<=n; i++)
        {
            if(满足约束函数和限界函数)//剪枝
            {
                swap(x[t],x[i]);
                backtrack(t+1);
                swap(x[t],x[i]);
            }
        }
    }

    n叉树

    n后问题

    图的m着色问题

    算法模板:

    void backtrack(int t)
    {
        if(搜索到叶子结点)
        {
            return;
        }
        for(i=1; i<=n; i++) //n叉树
        {
            x[t]=i;//例如n后问题中,记录第t后所在的第i列
            if(满足约束函数和限界函数)//剪枝
            {
                backtrack(t+1);
            }
        }
    }

    不确定树

    连续邮资问题

    算法模板:

    void backtrack(int t)
    {
        if(搜索到叶子结点)
        {
            return;
        }
        for(i=x; i<=y; i++) //x与y由相应的函数得到
        {
            x[t]=i;
            if(满足约束函数和限界函数)//剪枝
            {
                backtrack(t+1);
            }
        }
    }
  • 相关阅读:
    1360 奇怪的电梯(lift)
    1249 Lake Counting
    1330 【例8.3】最少步数
    1329 【例8.2】细胞
    1215 迷宫
    垃圾树
    vector
    1970:【15NOIP普及组】扫雷游戏
    1251:仙岛求药
    Python3+PCAN-USB基于PCAN-Basic二次开发实现上位机功能
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/12013129.html
Copyright © 2011-2022 走看看