簡體   English   中英

Java上的圖形/數據結構算法

[英]Algorithm for Graph/Data Structure on Java

我一直在研究以下問題,我有一個包含兩列的CSV文件,我們可以說文件名是“朋友”。 兩列都包含從A到Z的字母。例如

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,我會堅持邏輯,如果我使用圖論,我會在圖中遇到遍歷。

我有以下問題: -

  1. 使用數據結構或圖形的更好方法是什么? 或者比這更好的方法/邏輯/算法?
  2. 有誰知道如何遍歷JgraphT庫中的圖形。 我無法做到這一點,他們關於圖書館的文件非常有限。

請,任何幫助真的很感激。

通常,HashMaps是最快速且易於使用的。 我建議您使用它們而不是任何自定義庫,除非您確定某些庫可以輕松完成您需要的東西以及需要很長時間才能編寫代碼的東西。

在你的情況下,你可以只使用每個人作為一個鍵,並將他的朋友列表作為指向的對象。 正如之前的評論指出的那樣,解析.csv文件並相應地填充HashMap將解決您的問題。

您可以先將哈希表映射到其朋友集,例如A映射到{B},B映射到{C},如果Z有兩個朋友Y和W,則Z映射到{Y,W }。 這是從字母到字母集的哈希映射。

要計算熟人,請遍歷哈希映射。 當您在條目A - > {B,C,F}時,然后在內部循環中迭代通過集合B,C,F。將他們的朋友(三組)收集到一個集合中(只需將元素插入到臨時集中)如果找到A,則從該集中刪除A. 然后,該組的大小是A的熟人數。沖洗並重復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM