public static void BreadthFirstSearch(Graph <T> graph, VertexInfo <T> source) { foreach (var u in graph.GetAdjacencyList().Keys) { u.Color = Color.White; u.Distance = decimal.MaxValue; u.Parent = null; } source.Color = Color.Gray; source.Distance = 0; source.Parent = null; Queue <VertexInfo <T> > queue = new Queue <VertexInfo <T> >(); queue.Enqueue(source); while (queue.Count > 0) { VertexInfo <T> u = queue.Dequeue(); foreach (var v in graph.GetAdjacencyList()[u]) { if (v.Color != Color.White) { continue; } v.Color = Color.Gray; v.Distance = u.Distance + 1; v.Parent = u; queue.Enqueue(v); } u.Color = Color.Black; } }
int IComparer <VertexInfo <T> > .Compare(VertexInfo <T> x, VertexInfo <T> y) { if (x.Degree == y.Degree) { return(String.Compare(x.Id, y.Id, StringComparison.Ordinal)); } return((int)(y.Degree - x.Degree)); }
public bool RemoveEdge(VertexInfo <T> start, VertexInfo <T> end) { if (!AdjacencyList[start].Remove(end)) { return(false); } return(true); }