[Google面试题]一道关于图的算法题

问题: F, C, T, M, P, Y六人去旅游,其中F, C为情侣, 两人之间不结算费用; T, M也是情侣, 两人之间同样不结算费用。

旅途中产生的费用先由某些人支付, 旅游结束后, T提出结清费用, 但结算规则比较古怪:下图中费用分“均匀”和“不均匀”两部分, “均匀”部分的费用六人均摊, 而“不均匀”部分按“备注”中注明的方案部分人均摊。

 

[Google面试题]一道关于图的算法题_第1张图片

 

结算方分为四方:F&C, T&M, P, Y

请给出一个最简单(亦即资金流转次数最少)的清算方案。

 

一种最容易想到的方法是,第一步,利用Excel的公式功能,计算出每一方应该支付/收取的金额。第二步, 根据第一步的计算结果,画一个四个节点的图,在图中用箭头(箭头要求最少,才是最简洁的清算方案)标出资金流向以及金额。

我的计算结果是:

[Google面试题]一道关于图的算法题_第2张图片

 

这种方法的第二步属于纯手工计算。

现在问题来了,请设计一个算法,用程序来计算,程序输出为一个四节点的图。

你可能感兴趣的:(C++,算法,面试,Google,groovy)