女士们,先生们,老少爷们儿们!在下张大少。
《文明》游戏想来诸位并不陌生,筑成后需要在城市之间修路。在下这种懒癌晚期的玩家,显然会把这种无聊的工作委任给电脑。但说出来你可能不信,高手认为这其中蕴含着数学算法。
如图:把6座城市连起来,且道路的总长度越小越好。可有方法?
闲言少叙,且看在下操作!
首先简化游戏画面,6座城市分别为A、B、C、D、E、F,两两之间标上距离。
由此可见,我们要求解的是上图的一个子图。此图要求6座城市相互连接,同时路的总长度最短。这便是数学中的最小生成树问题。
求解最小生成树有两种经典算法。一是普利姆(Prim)算法;二是克鲁斯卡尔(Kruskal)算法。
我们先看普利姆算法:
Step1,任取一顶点,我们取顶点A。
Step2,与A相连的边有3条,AB、AC、AD,取最短的边AB。
Step3,与A、B相连的边有4条,AC、AD、BE、BF,取最短的边AD。