2012-08-20 4 views
1

Im пытается написать код, в котором вы выбираете два узла и создаете одно или несколько соединений между ними. Проблема в том, что я могу создать только одно соединение, соединение состоит из кромки и из-края, im используя указатель внутри хэш-карты.Как сделать несколько ссылок между двумя узлами (java)

Проблема в том, что я не могу понять, как сделать несколько связей между двумя узлами, она регистрирует только одну ссылку. Любой совет, как я могу это сделать, чтобы он регистрировал несколько ссылок? Нужно ли мне создавать другую карту?

public class ListGraph<G> implements Graph<G> { 
private Map<G, List<ListEdge<G>>> nodes = new HashMap<G, List<ListEdge<G>>>(); 

public void addNode(G ny) { 
    if (!nodes.containsKey(ny)) 
     nodes.put(ny, new ArrayList<ListEdge<G>>()); 
} 

public void connect(G from, G to, String name, int weight) { 
     getEdgesFrom(from).add(new ListEdge<G>(to, weight, name)); 
     getEdgesFrom(to).add(new ListEdge<G>(from, weight, name));  
    } 

ответ

2

Когда вы add на карте, если ключ найден значение заменяется новым.

Что вам нужно сделать.

1) Найти, если ключ уже (проверьте, если get() возвращение null или ListEdge<G>)

2) Если нуль, вы просто add, как вы в вашем коде.

3) Если это не null, вы получаете список и добавляете новый элемент в список, а не к карте. Итак, теперь у вас есть ключ G, который указывает на ListEdge с более чем одним элементом.

+0

не может быть правильным? 'общественные пустоты addEdges (G от, G к, имя String, ИНТ вес) { \t \t если (getEdge (от, до)! = NULL) { \t \t \t getEdgesFrom (с) .add (новый ListEdge (до, вес, наименование)); \t \t \t getEdgesFrom (to) .add (новый ListEdge (из, вес, имя)); \t \t \t \t} \t \t \t еще возвращение; \t \t \t} ' (жаль, что я не знаю, как правильно редактировать) – user1612725

+0

Было бы хорошо, если бы вы показали код' getEdge() 'в вашем вопросе (я предполагаю, что' getEdgesFrom() 'и' getEdgesTo () 'будет аналогичным). – SJuan76

+0

Здесь 'общественного ListEdge getEdge (G от, G к) { \t \t если \t \t \t бросить новый NoSuchElementException ("Ingen Sadan кивок!") (Nodes.containsKey (к)!); \t \t для (ListEdge край: getEdgesFrom (с)) \t \t \t, если (edge.getDestination() == с) \t \t \t \t возврата края; \t \t null null; \t} ' – user1612725