算法设计与分析——回溯法算法模板

Posted wkfvawl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计与分析——回溯法算法模板相关的知识,希望对你有一定的参考价值。

以深度优先方式系统搜索问题解的算法称为回溯法。在回溯法中,解空间树主要分为了四种子集树、排列树、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);
        }
    }
}

 

 

以上是关于算法设计与分析——回溯法算法模板的主要内容,如果未能解决你的问题,请参考以下文章

算法设计与分析 实验三 回溯法求解地图填色问题

算法设计与分析回溯法---八皇后问题(包含全排列)

算法设计与分析 实验六 回溯法

算法设计-搜索回溯法应用举例

五大基本算法——回溯法

五类常见算法小记 (递归与分治,动态规划,贪心,回溯,分支界限法)