Google Code jam——Radio Receiver

   题目:http://code.google.com/codejam/contest/dashboard?c=842485#s=p2

   题目大意是,能否从用户选定的一个点A出发,遍历所有的路径,每条路径只能遍历一次,最后返回点A,如果不能,问需要添加的最少的路径数?每两个点之间可以添加任意条路径。

   是《离散数学》图论的知识,第一,首先必须是连通图,因为要遍历所有的路径。其次,因为从点A出发,又要重新返回点A,所以所有的点的度数必须为偶数。

   因此我的做法是,先找出所有的联通子图,统计连通子图能否形成欧拉回路,即奇数度数点的个数,连接n个连通子图至少需要n条边,而这那条边能够帮助一个连通子图增加一个度数,因此,连接一个连通子图至少需要两条边,可以增加两度,也就是减少一条边。因此最后的连通子图与边的关系可以确定为,sum(edge[i]-1) + cl. if cl >= 2, edge[i] > 0. edge[i]表示第i个连通子图的变成欧拉回路图需要边的数目(也即是奇数度节点的个数/2),cl表示,连通子图的个数

   代码如下:

  

  

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值