Example #1
0
 public static void DepthFirstSearch(Vertex[] vertices, LinkedList<Vertex>[] graph, Action<Vertex> vertexAction)
 {
     for (var i = 0; i < vertices.Length; i++)
     {
         if (vertices[i].Color == VertexColor.White)
         {
             DepthFirstSearch(vertices[i], graph, vertexAction);
         }
     }
 }
        private static LinkedList<Vertex>[] CreateGraph(Vertex[] vertices, params int[][] adjecentVertices)
        {
            var graph = vertices.Select(v => new LinkedList<Vertex>()).ToArray();

            for (var i = 0; i < adjecentVertices.Length; i++)
            {
                for (var j = adjecentVertices[i].Length - 1; j >= 0; --j)
                {
                    graph[i].Insert(vertices[adjecentVertices[i][j]]);
                }
            }

            return graph;
        }
Example #3
0
        private static void DepthFirstSearch(Vertex vertex, LinkedList<Vertex>[] graph, Action<Vertex> vertexAction)
        {
            vertexAction(vertex);

            vertex.Color = VertexColor.Gray;

            for (var neighbour = graph[vertex.Id].Head; neighbour != null; neighbour = neighbour.Next)
            {
                if (neighbour.Value.Color == VertexColor.White)
                {
                    DepthFirstSearch(neighbour.Value, graph, vertexAction);
                }
            }

            vertex.Color = VertexColor.Black;
        }
Example #4
0
        public static void BreadthFirstSearch(LinkedList<Vertex>[] graph, Vertex startVertex, Action<Vertex> vertexAction)
        {
            var vertices = new Queue<Vertex>(graph.Length);
            startVertex.Color = VertexColor.White;
            vertices.Enqueue(startVertex);

            while (!vertices.IsEmpty)
            {
                var v = vertices.Dequeue();
                v.Color = VertexColor.Black;
                vertexAction(v);

                for (var neighbour = graph[v.Id].Head; neighbour != null; neighbour = neighbour.Next)
                {
                    if (neighbour.Value.Color == VertexColor.White)
                    {
                        neighbour.Value.Color = VertexColor.Gray;
                        vertices.Enqueue(neighbour.Value);
                    }
                }
            }
        }