public static IEnumerable <IVertice <T> > GetAdjacents <T>(this IVertice <T> vertice) { foreach (var e in vertice.Edges) { yield return(e.VerticeA == vertice ? e.VerticeB : e.VerticeA); } }
public Edge(string id, IVertice <T> verticeA, IVertice <T> verticeB, T cost) { this.verticeA = verticeA; this.verticeB = verticeB; this.cost = cost; this.id = id; }
public Edge(IVertice <T> verticeA, IVertice <T> verticeB, T cost) { this.verticeA = verticeA; this.verticeB = verticeB; this.cost = cost; var id = verticeA.ID[0] < verticeB.ID[0] ? verticeA.ID : verticeB.ID; id += VerticeA.ID == id ? verticeA.ID : verticeA.ID; this.id = id; }
public static bool Connected <T>(this IVertice <T> vertice, IVertice <T> adjacent) { foreach (var e in vertice.Edges) { if (e.HasVertice(adjacent)) { return(true); } } return(false); }
public IEdge <T> Connect(IVertice <T> vertice, T cost) { if (vertice != this && !this.Connected(vertice)) { var edge = new Edge <T>(this, vertice, cost); edges.Add(edge); vertice.Edges.Add(edge); return(edge); } return(null); }
public static IEdge <T> FindEdge <T>(this IGraph <T> graph, IVertice <T> verticeA, IVertice <T> verticeB) { foreach (var e in verticeA.Edges) { if (e.HasVertice(verticeB)) { return(e); } } return(null); }
public IEdge <int> Connect(IVertice <int> vertice, int cost) { if (vertice != this && !this.Connected(vertice)) { var edge = new EdgeControl(this, (VerticeControl)vertice, cost); edges.Add(edge); vertice.Edges.Add(edge); return(edge); } return(null); }
public static bool HasVertice <T>(this IEdge <T> edge, IVertice <T> vertice) { return(edge.VerticeA == vertice || edge.VerticeB == vertice); }