PDA

View Full Version : [JAVA o anche C] Grafo a liste di adiacenza pesato


Dhavamba
31-08-2009, 09:54
Ho un problema, riesco a fare un grafo a liste di adiacenza ma non sò come farlo anche pesato, ho pensato di mettere una matrice a ogni nodo ma ho la netta sensazione che quella non sia una strada giusta (così assomiglirebbe troppo ad un grafo a matrice di adiacenza)!

Qualche consiglio su come posso implementare il "pesato"?

Potrei per esempio, consapevole che ogni nodo del grafo ha una lista di nodi "normali" contenenti i nodi grafo, potrei cambiare la classe dei nodi "normali" per metteer qualcosa del tipo getPeso()...o no?

wingman87
31-08-2009, 11:07
Il peso non appartiene ai nodi ma agli archi, ogni entry di una lista di adiacenza rappresenta un arco orientato tra il nodo cui appartiene la lista e il nodo specificato nella entry. Per rendere gli archi pesati basta aggiungere alla entry un campo che contenga il peso dell'arco.

Dhavamba
31-08-2009, 12:36
quindi così non và, cioè ho aggiunto nella classe nodo (non nella classe nodo grafo) un getPeso e un setPeso, questo perchè sono consapevole che se aggiungo un nodo nella lista del nodografo è perchè esiste l'arco corrispondente, in poche parole l'ho fatto così:


public void InsertArco(Nodo_Grafo a, Nodo_Grafo b,int c) {
a.getLista().insertTail(b);
a.search(b.getInfo()).setPeso(c);
b.getLista().insertTail(a);
b.search(a.getInfo()).setPeso(c);
numArchi++;
}




e questo il metodo per ritrovare il peso di due archi



public int PesoArco(Nodo_Grafo a, Nodo_Grafo b) {
return a.search(b.getInfo()).getPeso();
}



search() = fà una ricerca dell'object b nella lista.
getLista() = fà il return della lista del nodo specifico del grafo
insertTail() = aggiunge un nodo nella lista.



Ho provato nel Main e lo fà bene il lavoro, quindi è giusto?


P.S: Ovviamente nella classe node, il getInfo() e il getPeso() sono due cose distinte, uno dà il Nodo_Grafo (pensa ad un contenitore dentro un contenitore) e l'altro il peso...