原问题描述
战报交流:战场上不同的位置有N个战士(N>4),每个战士知道当前的一些战况,现在需要这N个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通话次数,是的战场上的n个士兵知道所有的战况信息,不需要写程序代码,得出最少的通话次数。
解答:
笔试时候想到的是:
N-1个人围成一个环,将知道的消息告诉都第N个人,需要N-1次,同时第N-1个人与第N个人交流时,两人互相交流消息,这样子第N-1与第N个人都知道了所有人的信息,接下来第N-1人沿着环将消息传递下去,需要N-2次。 所以需要N-1+(N-2)=2N-3.
但是实际上这个问题有着更优的解法。
扩展的一类问题:
题目:假如我们班有n个MM,每一个MM都有一个独家八卦消息。两个MM可以通过电话联系,一通电话将使得双方都获知到对方目前已知的全部消息。要想所有n个MM都知道所有n条八卦消息,最少需要多少通电话?请给出你们的通话方案。
(来自博客Matrix67:http://www.matrix67.com/blog/archives/1078以及百度文库:http://w