Chinese Postman Problem Aizu - DPL_2_B(无向图中国邮路问题)

题意:  带权无向图上的中国邮路问题:一名邮递员需要经过每条边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少。(2 <= N <= 15, 1 <= M <= 1000)解析:  每条边都要至少经过一次, 如果每条边只能经过一次,那么是不是就是一个欧拉回路的问题,但无向图的欧拉回路必须保证 每个点的度数为偶数所以如果有某个...
摘要由CSDN通过智能技术生成

 题意:

  带权无向图上的中国邮路问题:一名邮递员需要经过每条边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少。(2 <= N <= 15, 1 <= M <= 1000)

解析:

  每条边都要至少经过一次, 如果每条边只能经过一次,那么是不是就是一个欧拉回路的问题,但无向图的欧拉回路必须保证 每个点的度数为偶数

所以如果有某个点的度数为奇数,那就比较尴尬了。。。

  因为一条边有两个端点, 所以如果有奇数点,那么奇数点的个数一定是个偶数

  我们先假设在这个无向图中有两个奇点分别为s 和 t,那么根据欧拉路径 s 一定可以经过所有边一次 然后到t , 但我们还要回去,那么是不是走t 到 s 的最短路就好了

那么最短路算法求出这个原图中是t - s的最短路  添加到原图中,是不是就是一个欧拉回路!

  同理 如果奇点个数大于2 ,那么我们就建一个二分图,把这些点分别放到左边 和 右边,每两个点的边权为它们之间的最短路,求最小权匹配就好了

  然后把求出来的这些匹配 添加到原图中  求欧拉回路

  但这题的n比较小  用状压去枚举所有的情况  dp一下就好了

 

 

1 如果是连通图,转2,否则返回无解并结束;

2 检查中的奇点,构成图的顶点集;

3 求出中每对奇点之间的最短路径长度,作为图对应顶点间的边权;

4 对进行最小权匹配;

5 把最小权匹配里的每一条匹配边代表的路径,加入到图中得到图;

6 在中求欧拉回路,即所求的最优路线。

 

 

 

#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 10010, INF = 0x7fffffff;
int head[maxn], d[maxn], vis[maxn], deg[maxn], dp[1 << 15 + 1];
int n, m, cnt;
vector<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值