Jay*_*Jay 11 algorithm graph cyclic
我正在为一堂课写一本卡坦定居者.其中一项额外功能是自动确定哪个玩家的道路最长.我已经考虑过了,看起来深度优先搜索的一些细微变化可能会起作用,但我无法弄清楚如何处理循环检测,如何处理玩家的两个初始道路网络的加入,和其他一些细枝末节.我怎么能在算法上做到这一点?
对于那些不熟悉游戏的人,我会尝试简洁而抽象地描述问题:我需要在无向循环图中找到最长的路径.
这应该是一个相当容易实现的算法.
首先,将道路分成不同的集合,其中每个集合中的所有道路段都以某种方式连接.有这样做的各种方法,但这里有一个:
注意:根据官方的Catan规则,如果另一个游戏在两个部分之间的联合上建立定居点,则可以打破道路.你需要检测到这一点,而不是通过和解.
注意,在上面和后面的步骤中,只考虑当前的玩家细分.您可以忽略其他段,就好像它们甚至不在地图上一样.
这会为您提供一个或多个集合,每个集合包含一个或多个路段.
好的,对于每一组,请执行以下操作:
现在,从您选择的细分市场中,进行递归分支深度优先搜索,跟踪您到目前为止找到的当前道路的长度.始终标记路段,不要分支到已标记的段.这将允许算法在"吃掉自己的尾巴"时停止.
每当您需要回溯时,因为没有更多分支,请记下当前长度,如果长度超过"之前的最大值",则将新长度存储为最大长度.
为所有套装做这件事,你应该有最长的路.