コード例 #1
0
ファイル: Network.cs プロジェクト: MatthewBald/Graph
        public void BFS(Vertex v)
        {
            Queue <Vertex> vertexQueue = new Queue <Vertex>();

            vertexQueue.Enqueue(v);
            v.SetLabel("VISITED");

            while (vertexQueue.Count != 0)
            {
                Vertex w = vertexQueue.Dequeue();

                if (w.GetConnections().Count != 0)
                {
                    foreach (Edge e in IncidentEdges(w))
                    {
                        if (e.GetLabel() == "UNEXPLORED")
                        {
                            Vertex u = Opposite(w, e);

                            if (u != null && u.GetLabel() == "UNEXPLORED")
                            {
                                e.SetLabel("DISCOVERY");
                                u.SetLabel("VISITED");
                                vertexQueue.Enqueue(u);
                            }
                            else
                            {
                                e.SetLabel("CROSS");
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: Network.cs プロジェクト: MatthewBald/Graph
        public void DFS(Vertex v)
        {
            v.SetLabel("VISITED");

            Console.WriteLine("");
            Console.WriteLine(v.GetId());
            Console.WriteLine(v.GetLabel());

            foreach (Edge e in IncidentEdges(v))
            {
                if (e.GetLabel() == "UNEXPLORED")
                {
                    Vertex w = Opposite(v, e);
                    if (w != null && w.GetLabel() == "UNEXPLORED")
                    {
                        e.SetLabel("DISCOVERY");
                        DFS(w);
                    }
                    else
                    {
                        e.SetLabel("BACK");
                    }
                }
            }
        }