Ho deciso di fare un array di liste concatenate di nodi. Per il momento sono arrivato fin qua:
codice:
public class ListaConcatenataDINodi {
// inner class della classe che definisce il nodo
private class NodoLista{
private String arco;
private NodoLista collegamento;
//costruttore della classe innestata
public NodoLista(){
collegamento = null;
arco = null;
}
//altro costruttore della classe NodoLista
public NodoLista(String valoreArco, NodoLista valoreCollegamento){
collegamento = valoreCollegamento;
arco = valoreArco;
}
}
//creo un oggetto NodoLista per "referenziare" la posizione che all'inizio sarò in testa
private NodoLista testa;
//costruttore della classe
public ListaConcatenataDINodi(){
testa = null;
}
//metodo per determinare il numero di elementi nella lista
public int lunghezza(){
intconteggio=0;
NodoLista posizione = testa;
while(posizione!=null){
conteggio++;
posizione = posizione.collegamento;
}
returnconteggio;
}
//metodo per l'aggiunta in testa di un arco
public void aggiungiInTesta(String arco){
testa = new NodoLista(arco, testa);
}
/*
* metodo per la ricerca di un arco, in questo caso ho deciso di verificare se c'è "connesione" tra due nodi
ovvero se tra (x1, y1) e (x2, y2): y1=x2. Se si aggiungi quel nodo in testa
*/
private void trova (String arco){
NodoLista posizione = testa;
while(posizione != null){
String arcoAllaPosizione = posizione.arco;
char s = arcoAllaPosizione.charAt(0);
char t = arco.charAt(3);
if (s==t){
aggiungiInTesta(arco);
}
}
}
}
codice:
public class TabellaHash {
private ListaConcatenataDINodi[] arrayHash;
privatestaticfinalintDIMENSIONE = 10;
//costruttore di classe
public TabellaHash(){
arrayHash = new ListaConcatenataDINodi[DIMENSIONE];
for (int i= 0; i<DIMENSIONE ; i++){
arrayHash[i]= new ListaConcatenataDINodi();
}
}
public void aggiungi (String arco){
}
}
La seconda classe si chiama TabellaHash perché inizialmente pensavo di usare il metodo hash per la ricerca della lista giusta, ma poi ho pensato che non può essere corretto perché io non devo cercare due nodi uguali, ma due nodi che abbiano un estremo di arco in comune, dato che è un grafo aciclico quindi (2,3) è uguale a (3,2).
Mi sono però bloccato perché non riesco a stabilire un criterio per cercare qual'è la lista giusta a cui inserire il nodo. Perché quel punto il metodo per la ricerca della lunghezza della lista c'è quindi mi basterebbe verificare con un metodo in quali liste è presente il nodo di uscita e a quel punto di quelle posso trovare la lunghezza e dare in output la lunghezza più piccola.
Naturalmente se qualcuno ha alternative più semplici/efficaci lo ascolto volentieri.