在编写的一个java游戏中遇到了这样一个问题。
游戏规则:
如图,给定的棋盘上有多个小岛,红蓝两个玩家可以在岛上和水里下棋(三角和圆形是村庄或村民,棕色圆是资源,不用关注)。游戏结算时,红蓝两玩家要找到自己最长的一条链,这条链链接了多少个岛屿就得多少分。本图中红蓝两个玩家最多链接起来的绿色小岛数都是2,所以两者得分都是2.
我要如何编写代码来找到最长链呢?大致提供思路即可,这应该是一个并查集问题,我不知道如何处理合并多个子链的问题。
在编写的一个java游戏中遇到了这样一个问题。
游戏规则:
答:和程序段一一样操作,通过TXT文件另存为成S文件后,导入虚拟机,使用winDLX执行,运行完毕后,可以通过statistics查看到程序段2的周期数为124个周期。
和程序段1相比,程序段2的不同之处在于程序段2有意识的将没有数据相关的除法运算放在一起连续执行,把数据都算好了,再执行需要数据的乘法运算和浮点加法运算,最后再把用到乘法运算和浮点加法运算的除法指令执行,在保证最后结果正确一致的前提下,通过顺序的调整减少了数据相关的发生次数和暂停周期,因为都是尽可能把用到的都算好再执行的,但是这样的调整就导致有一个连续四个的除法指令和一个连续两个的除法指令,这会带来大量的结构相关和暂停。这里直接取程序段2的statistics就可以看的出来: