优先队列式分支限界法

本文介绍了一种使用优先队列实现的分支限界法(BBTSP)来解决图的最短回路问题。算法通过创建最小堆来存储活节点,并根据下界(限界函数)进行节点的扩展。在遍历过程中,不断更新最优解,并通过调整节点顺序寻找潜在的最优回路。最后,当找到最优解或无法继续扩展时,算法结束。
摘要由CSDN通过智能技术生成
 ";
        cout << v[1];
    }
}

/*****************************************************************
* 类描述:最小堆(队列中元素类型)
* 参数描述:
    x,用于记录当前解;
    s,表示节点在排列树中的层次,从排列树的根节点到该节点的路径为x[0:s],
        需要进一步搜索的顶点是x[s+1:n-1]。
    cc,表示当前费用,
    lcost,是子树费用的下界,
    rcost,是x[x:n-1]中顶点最小出边费用和。
*****************************************************************/
class MinHeapNode
{
public:
    char name; // 节点的序号
    int rcost, // x[s:n-1]中顶点最小出边费用和
        lcost, // 子树费用的下界
        cc;    // 当前费用
    int s,     // 根节点到当前节点的路径为x[0:s]
        *x;    // 需要进一步搜索的顶点是x[s+1:n-1]

    // 构造节点并递增序号
    MinHeapNode()
    {
        num += 1;
        name = num + 'A';
    }

    // 最小堆中使用下界排序
    bool operator<(const MinHeapNode &MH) const
    {
        return lcost > MH.lcost;
    }

    // 打印节点信息
    void printNode(priority_queue pq)
    {
        cout << "============== Node: " << name << " ==============" << endl;
        cout << "最小出边和(rcost):" << rcost << "\t子树费用的下界(lcost):" << lcost 
        <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值