Пример #1
0
        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;
            }
        }
Пример #2
0
 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));
 }
Пример #3
0
 public bool RemoveEdge(VertexInfo <T> start, VertexInfo <T> end)
 {
     if (!AdjacencyList[start].Remove(end))
     {
         return(false);
     }
     return(true);
 }