1 / 18
文档名称:

回溯算法原理和几个常用的算法实例.doc

格式:doc   大小:627KB   页数:18页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

回溯算法原理和几个常用的算法实例.doc

上传人:zbfc1172 2019/1/4 文件大小:627 KB

下载得到文件列表

回溯算法原理和几个常用的算法实例.doc

文档介绍

文档介绍:回溯方法的步骤如下:
     1) 定义一个解空间,它包含问题的解。
     2) 用适于搜索的方式组织该空间。
     3) 用深度优先法搜索该空间,利用限界函数避免移动到不可能产生解的子空间。
回溯算法的一个有趣的特性是在搜索执行的同时产生解空间。在搜索期间的任何时刻,仅保留从开始节点到当前节点的路径。因此,回溯算法的空间需求为O(从开始节点起最长路径的长度)。这个特性非常重要,因为解空间的大小通常是最长路径长度的指数或阶乘。所以如果要存储全部解空间的话,再多的空间也不够用。
算法应用:
回溯算法的求解过程实质上是一个先序遍历一棵"状态树"的过程,只是这棵树不是遍历前预先建立的,而是隐含在遍历过程中。
(1) 幂集问题(组合问题) (参见《数据结构》(严蔚敏))
     求含N个元素的集合的幂集。
     如对于集合A={1,2,3},则A的幂集为
     p(A)={{1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},Φ}
幂集的每个元素是一个集合,它或是空集,或含集合A中的一个元素,或含A中的两个元素,或者等于集合A。反之,集合A中的每一个元素,它只有两种状态:属于幂集的元素集,或不属于幂集元素集。则求幂集P(A)的元素的过程可看成是依次对集合A中元素进行“取”或“舍”的过程,并且可以用一棵状态树来表示。求幂集元素的过程即为先序遍历这棵状态树的过程。
程序:
#include <>
#include <>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode,*LinkList;
//初始化
LinkList ListInit()
{
    LNode *base=(LinkList)malloc(sizeof(LNode));
    base->data=0;
    base->next=NULL;
    return base;
}
//插入一个元素
int ListInsert(LinkList L,int i,ElemType e)
{
    LNode *p,*s;
    int j=0;
    p=(LNode *)L;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return ERROR;
    s=(LNode *)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return OK;
}
//删除一个结点
int ListDelete(LinkList &L,int i,ElemType &e)
{
    LinkList p=L,q;
    int j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1)
        return ERROR;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
}
//长度
int ListLength(LinkList L)
{
    LinkList p=L;
    int j=0;
    if(!L)
        return ERROR;
    while(p->next)
    {
        p=p->next;
        ++j;
    }
    return j;
}
//查找一个元素
int GetElem(LinkList L,int i,ElemType &e)
{
    LNode *p=L;
    int j=0;
    while(p->next&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i)
        return ERROR;
    e=p->data;
    return OK;
}

最近更新

纵横质控模式在基层医院病房管理中的应用 3页

素质培养对高职数学教学的影响初探 3页

管道防腐涂层的发展现状及趋势分析 3页

立井刚性井筒装备与提升容器相互作用模拟试验.. 3页

空心漂珠的应用 3页

科普场馆教育工作者的科学本质观调查研究 3页

福州市住宅价格空间分布趋势及其特征研究 3页

碳纳米管石墨烯杂化材料改性环氧树脂力学性能.. 3页

研究消费者在铁路客运中的法律保护 3页

石油钻探取心工程风险的量化分析 4页

英语学科近5年中考试题分析 39页

肿瘤、移植、重症监测心脑复苏 18页

2025年龙年网络科技四个字公司奢华好名 5页

2025年龙年新材料四个字公司名字精选600个 8页

2025年龙年信息技术公司名字精选500个 7页

2025年黑龙江高考专科分数线公布 11页

2025年高考语文知识点教案 44页

2025年高考简短祝福语金句 12页

2025年属龙和属狗的人财运相冲吗 3页

2025年高考正能量简短句子创意文案 7页

2025年高考数学提分技巧 4页

2025年属鸡的和什么属相最合 2页

2025年高考地理人类与地理环境的协调发展练习.. 6页

2025年属蛇2025年有添丁喜事 5页

2025年高考关于励志满分作文 40页

2025年高温天气防中暑安全教育内容 4页

2025年属狗人2025年8月份运势 4页

2025年属牛带什么辟邪招财转运 8页

苏卫单招校测2025试卷 9页

《黄河颂》33694省公开课一等奖全国示范课微课.. 29页