V
- etichette dei nodiE
- etichette degli archipublic interface Graph<V,E>
V
ed i cui archi sono etichettati con elementi della
classe E
. Le interfacce GraphNode<V>
e GraphEdge<V,E>
definiscono le operazioni generiche sui nodi e sugli archi.
Il grafo può essere diretto o non diretto, la classe che implementa questa
interfaccia specifica questo aspetto. Tale informazione è disponibile tramite
il metodo isDirected()
.
Le etichette dei nodi sono obbligatorie ed uniche, cioè un nodo non può avere
etichetta nulla e due nodi con la stessa etichetta sono lo stesso nodo.
Le etichette degli archi sono opzionali.Modifier and Type | Method and Description |
---|---|
boolean |
addEdge(GraphEdge<V,E> edge)
Aggiunge un arco a questo grafo.
|
boolean |
addNode(GraphNode<V> node)
Aggiunge un nodo a questo grafo.
|
void |
clear()
Cancella tutti i nodi e gli archi di questo grafo portandolo ad essere un
grafo vuoto.
|
boolean |
containsEdge(GraphEdge<V,E> edge)
Cerca se c'è un certo arco in questo grafo.
|
boolean |
containsNode(GraphNode<V> node)
Determina se c'è un certo nodo in questo grafo.
|
int |
edgeCount()
Restituisce il numero di archi in questo grafo.
|
java.util.Set<GraphNode<V>> |
getAdjacentNodes(GraphNode<V> node)
Restituisce l'insieme di tutti i nodi adiacenti a un certo nodo.
|
int |
getDegree(GraphNode<V> node)
Restituisce il grado di un nodo, cioè il numero di archi connessi al
nodo.
|
java.util.Set<GraphEdge<V,E>> |
getEdges()
Restituisce l'insieme di tutti gli archi in questo grafo.
|
java.util.Set<GraphEdge<V,E>> |
getEdges(GraphNode<V> node)
Restituisce l'insieme di tutti gli archi connessi a un certo nodo in un
grafo.
|
java.util.Set<GraphEdge<V,E>> |
getEdgesBetween(GraphNode<V> node1,
GraphNode<V> node2)
Restituisce l'insieme degli archi tra due nodi.
|
java.util.Set<GraphEdge<V,E>> |
getEdgesBetween(int index1,
int index2)
Restituisce l'insieme degli archi tra due nodi indicizzati
nell'intervallo
[0, this.nodeCount() - 1] . |
java.util.Set<GraphEdge<V,E>> |
getIngoingEdges(GraphNode<V> node)
Restituisce l'insieme di tutti gli archi entranti in un certo nodo in un
grafo diretto.
|
GraphNode<V> |
getNode(V label)
Restituisce il nodo di questo grafo avente l'etichetta passata.
|
GraphNode<V> |
getNodeAtIndex(int i)
Restituisce il nodo attualmente associato a un certo indice
nell'intervallo
[0, this.nodeCount() - 1] . |
int |
getNodeIndex(V label)
Restituisce un indice unico attualmente associato a un certo nodo
nell'intervallo
[0, this.nodeCount() - 1] . |
java.util.Set<GraphNode<V>> |
getNodes()
Restituisce l'insieme dei nodi di questo grafo.
|
java.util.Set<GraphNode<V>> |
getPredecessorNodes(GraphNode<V> node)
Restituisce l'insieme di tutti i nodi collegati tramite un arco entrante
in un certo nodo in un grafo diretto.
|
boolean |
isDirected()
Determina se questo grafo è diretto oppure no.
|
boolean |
isEmpty()
Determina se questo grafo è vuoto, cioè senza nodi e senza archi.
|
int |
nodeCount()
Restituisce il numero di nodi in questo grafo.
|
boolean |
removeEdge(GraphEdge<V,E> edge)
Rimuove un arco da questo grafo.
|
boolean |
removeNode(GraphNode<V> node)
Rimuove un nodo da questo grafo.
|
int |
size()
Restituisce la dimensione di questo grafo definita come il numero di nodi
più il numero di archi.
|
int nodeCount()
int edgeCount()
int size()
boolean isEmpty()
void clear()
boolean isDirected()
java.util.Set<GraphNode<V>> getNodes()
boolean addNode(GraphNode<V> node)
node
- il nuovo nodo da aggiungerejava.lang.NullPointerException
- se il nodo passato è nullboolean removeNode(GraphNode<V> node)
node
- il nodo da rimuoverejava.lang.NullPointerException
- se il nodo passato è nulljava.lang.UnsupportedOperationException
- se l'implementazione del grafo
non supporta questa operazioneboolean containsNode(GraphNode<V> node)
node
- il nodo cercatonode
esiste in questo grafojava.lang.NullPointerException
- se il nodo passato è nullGraphNode<V> getNode(V label)
label
- l'etichetta del nodo da restituirelabel
java.lang.NullPointerException
- se l'etichetta è nullajava.lang.IllegalArgumentException
- se non esiste un nodo di questo
grafo avente l'etichetta uguale a
label
int getNodeIndex(V label)
[0, this.nodeCount() - 1]
. Questa
funzionalità è tipicamente disponibile se il grafo è rappresentato con
una matrice di adiacenza. Tale indice può anche essere usato per
identificare i nodi in strutture dati esterne come array o liste che
contengono informazioni aggiuntive calcolate, ad esempio, da un algoritmo
sul grafo.
Questa operazione è opzionale.label
- l'etichetta del nodo di cui restituire l'indice[0, this.nodeCount() - 1]
attualmente associato al
nodo con etichetta label
. L'indice può cambiare se il
grafo viene modificato togliendo dei nodijava.lang.NullPointerException
- se l'etichetta passata è nulljava.lang.IllegalArgumentException
- se un nodo con l'etichetta
label
non esiste in
questo grafojava.lang.UnsupportedOperationException
- se questa operazione non è
supportata dall'implementazione
di questo grafoGraphNode<V> getNodeAtIndex(int i)
[0, this.nodeCount() - 1]
. Questa
funzionalità è tipicamente disponibile se il grafo è rappresentato con
una matrice di adiacenza.
Questa operazione è opzionale.i
- l'indice del nodo.java.lang.IndexOutOfBoundsException
- se l'indice passato non
corrisponde a nessun nodo o è
fuori dai limiti
dell'intervallo
[0, this.nodeCount() - 1]
java.lang.UnsupportedOperationException
- se questa operazione non è
supportata dall'implementazione
di questo grafojava.util.Set<GraphEdge<V,E>> getEdgesBetween(int index1, int index2)
[0, this.nodeCount() - 1]
. Questa
funzionalità è tipicamente disponibile se il grafo è rappresentato con
una matrice di adiacenza. Nel caso di grafo orientato vengono restituiti
gli archi che hanno come sorgente il nodo corrispondente al primo indice
e come destinazione il nodo corrispondente al secondo indice.
Questa operazione è opzionale.index1
- indice del primo nodo (nodo sorgente in caso di grafo
orientato)index2
- indice del secondo nodo (nodo destinazione in caso di
grafo orientato)java.lang.IndexOutOfBoundsException
- se almeno uno degli indici
passati non corrisponde a
nessun nodo o è fuori dai
limiti dell'intervallo
[0, this.nodeCount() - 1]
java.lang.UnsupportedOperationException
- se questa operazione non è
supportata dall'implementazione
di questo grafojava.util.Set<GraphEdge<V,E>> getEdgesBetween(GraphNode<V> node1, GraphNode<V> node2)
node1
- primo nodo (nodo sorgente in caso di grafo diretto)node2
- secondo nodo (nodo destinazione in caso di grafo
diretto)java.lang.IllegalArgumentException
- se almeno uno dei due nodi passati
non esistejava.lang.NullPointerException
- se almeno uno dei due nodi passati è
nullojava.util.Set<GraphNode<V>> getAdjacentNodes(GraphNode<V> node)
node
- il nodo di cui cercare i nodi adiacentijava.lang.IllegalArgumentException
- se il nodo passato non esistejava.lang.NullPointerException
- se il nodo passato è nullojava.util.Set<GraphNode<V>> getPredecessorNodes(GraphNode<V> node)
node
- il nodo di cui cercare i nodi successorijava.lang.UnsupportedOperationException
- se il grafo su cui il metodo è
chiamato non è direttojava.lang.IllegalArgumentException
- se il nodo passato non esistejava.lang.NullPointerException
- se il nodo passato è nullojava.util.Set<GraphEdge<V,E>> getEdges()
boolean addEdge(GraphEdge<V,E> edge)
edge
- l'arco da inserirejava.lang.NullPointerException
- se l'arco passato è nullojava.lang.IllegalArgumentException
- se almeno uno dei due nodi
specificati nell'arco non esistejava.lang.IllegalArgumentException
- se l'arco è diretto e questo grafo
non è diretto o viceversaboolean removeEdge(GraphEdge<V,E> edge)
edge
- l'arco da rimuoverejava.lang.IllegalArgumentException
- se almeno uno dei due nodi
specificati nell'arco non
esistejava.lang.NullPointerException
- se l'arco passato è nullojava.lang.UnsupportedOperationException
- se l'implementazione del grafo
non supporta questa operazioneboolean containsEdge(GraphEdge<V,E> edge)
edge
- l'arco da cercarejava.lang.NullPointerException
- se l'arco passato è nullojava.lang.IllegalArgumentException
- se almeno uno dei due nodi
specificati nell'arco non esistejava.util.Set<GraphEdge<V,E>> getEdges(GraphNode<V> node)
node
- il nodo di cui sono richiesti gli archi connessijava.lang.IllegalArgumentException
- se il nodo passato non esistejava.lang.NullPointerException
- se il nodo passato è nullojava.util.Set<GraphEdge<V,E>> getIngoingEdges(GraphNode<V> node)
node
- il nodo di cui determinare tutti gli archi entrantijava.lang.UnsupportedOperationException
- se il grafo su cui il metodo è
chiamato non è direttojava.lang.IllegalArgumentException
- se il nodo passato non esistejava.lang.NullPointerException
- se il nodo passato è nulloint getDegree(GraphNode<V> node)
node
- il nodo di cui calcolare il gradojava.lang.IllegalArgumentException
- se il nodo passato non esistejava.lang.NullPointerException
- se il nodo passato è nullo