Sto cercando di implementare una struttura di dati del grafico in C #. Ho le seguenti interfacce:
public interface IVertex<TValue>
{
TValue Value { get;}
VertexList<IVertex<TValue>> Neighbours { get;}
int InDegree { get;}
int OutDegree { get;}
}
public interface IWeightedEdge<TValue, TWeight>
{
IVertex<TValue> source { get;}
IVertex<TValue> destination { get;}
TWeight weight { get; }
}
public interface IWeightedGraph<TVertexValue, TEdgeWeight>
{
bool AddVertex(TVertexValue value);
TVertexValue RemoveVertex(IVertex<TVertexValue> vertex);
bool RemoveVertex(TVertexValue value);
bool AddEdge(IVertex<TVertexValue> source, IVertex<TVertexValue> dest, TEdgeWeight weight);
bool RemoveEdge(IVertex<TVertexValue> source, IVertex<TVertexValue> dest);
}
Da questo, puoi vedere che è responsabilità della classe Vertex (la classe che implementa l'interfaccia IVertex) per dire dei suoi vertici adiacenti (funzione Vicini), il suo grado, il suo grado ecc. Mentre stavo progettando questo, Mi è stato detto da un mio amico che la classe Graph (quella che implementerà IGraph) dovrebbe assumersi la responsabilità di operazioni come recuperare i vertici adiacenti, trovare i gradi in / out ecc. Il suo punto è che le operazioni di cui sopra sono valide solo quando un vertice diventa parte di un grafico. Ma il mio punto è che un vertice è indipendente; può esistere anche al di fuori di un grafico. Quindi, il vertice dovrebbe fornire le operazioni su di esso.
Quale pensi sia corretto? Per favore condividi le tue opinioni su questo.