我一直在研究以下问题:我有一个包含两列的CSV文件,我们可以说这些文件名是“朋友”。两列都包含从A到Z的字母。 e.g。
A B
B C
A E
D F
E F
每行有两个不同的字母(行中没有重复)。 A是B的朋友,C是D等的朋友......如果A人与B人交谈,B人与C人交谈,则B和C将成为水上运动。 Aquintaces是一个共同的朋友。我需要找出谁有更多的饮用水?
我一直尝试使用两种不同的方法,一种使用不同的数据结构,如hashmap,arraylist,stack等,另一种使用图论(JGraphT库)。 但是,如果我使用数据strcutres,我会坚持逻辑,如果我使用图论,我会在图中遇到遍历。
我有以下问题: -
拜托,非常感谢任何帮助。
答案 0 :(得分:1)
一般来说,HashMaps是最快速且易于使用的。我建议您使用它们而不是任何自定义库,除非您确定某些库可以轻松完成您需要的东西以及需要很长时间才能编写代码的东西。
在你的情况下,你可以只使用每个人作为一个键,并将他的朋友列表作为指向的对象。解析您的.csv文件并相应地填充HashMap将解决您的问题,正如之前的评论指出的那样。
答案 1 :(得分:0)
您可以首先使用哈希表将每个字母映射到其朋友的集合,例如映射到{B},B映射到{C},如果Z有两个朋友Y和W,则Z映射到{Y,W}。这是从字母到字母集的哈希映射。
要计算熟人,请遍历哈希映射。当你在入境A - > {B,C,F}然后在内部循环中迭代通过集合B,C,F。将他们的朋友(三个集合)收集到一个集合中(只需将元素插入到临时集合中)并从该集合中删除A A被发现了。那个集合的大小就是A的熟人数量。冲洗并重复。