我有以下问题
输入如下:
agree 1 2
disagree 2 3
? 1 2
? 1 3
agree 1 3
? 4 5
agree 0 5
等等数字代表人(从0到n)。
同意意味着这两个人有着相同的观点(我不知道哪一个,不管是积极的还是消极的,我只知道它是相同的)。
不同意意味着他们有不同的意见。
? 是一个程序必须回答的问题,也就是说,如果这两个人有相同的意见或没有。
此特定输入的输出应如下所示:
yes
no
error
don't know
是的,因为第一个问题是1和2是否与他们基于第一个输入行的意见相同。
不是因为1和3有不同的意见,因为我们可以看到1同意2,2不同意3,所以1必须不同意3。
错误是因为我们得到的输入是1和3,我们知道这是一个谎言,所以我们打印出错误。
不知道是因为最后一个问题是4号和5号,他们之前没有提到,所以我们不知道他们的意见。
所以我的想法是创建一个类人并赋予他们属性:数字和颜色(代表意见),但后来我意识到这在我没有关联的组的情况下是行不通的,例如1 2同意,4 5同意,然后如果2 4同意,我会得到一个问题,我不应该知道答案,但他们会有相同的颜色。。
我的问题是,如果你能帮我找出最好的方法来存储每个人的意见信息,最好是用java或python。
最佳答案
使用不相交集数据结构获取由agree
s引起的图的连接组件。
这将导致顶点(=人)的划分P = {P_1, P_2, ..., P_n}
然后考虑下图:
G = (P, {(A, B) ∈ P² | ∃ a ∈ A, b ∈ B: disagree(a, b)})
也就是说,在新的图中有两个分区是连通的,如果这些节点中有两个不一致的顶点。
现在您可以得到以下结果:
don't know
如果这些人不在属于g的连接部分的g的顶点内否则,将包含g中的两个人的连接组件2-着色。结果是:
error
如果连接组件中有任何2个顶点,其中包含不同意的人,或者如果连接组件没有2个颜色yes
如果不error
并且包含这些人的顶点具有相同的颜色no
否则