示例#1
0
文件: Chap42.cs 项目: jerry82/JData
        public bool RouteDFS(string v1, string v2, Graph graph)
        {
            bool canRoute = false;

            GNode root = graph.GetNode(v1);
            Stack<GNode> stack = new Stack<GNode>();
            List<string> vList = new List<string>();

            stack.Push(root);

            while (stack.Count > 0) {
                GNode cur = stack.Peek();

                if (!vList.Contains(cur.Name)) {
                    vList.Add(cur.Name);
                    cur.Visited = true;
                }

                Dictionary<string, int> neighbors = cur.Neighbors;
                if (neighbors == null) {
                    GNode tmp = stack.Pop();
                    Console.WriteLine("pop: {0}", tmp.Name);

                }
                else {
                    bool noNeighbor = true;

                    foreach (string n in neighbors.Keys) {
                        if (!graph.Nodes[n].Visited) {
                            stack.Push(graph.Nodes[n]);

                            noNeighbor = false;
                            break;
                        }
                    }

                    if (noNeighbor) {
                        stack.Pop();
                    }
                }

                Console.ReadLine();

            }

            foreach (string name in vList) {
                Console.Write(" {0} ", name);
            }
            Console.WriteLine();

            return canRoute;
        }
示例#2
0
文件: Chap42.cs 项目: jerry82/JData
        public bool RouteBFS(string v1, string v2, Graph graph)
        {
            bool canRoute = false;

            Queue<GNode> queue = new Queue<GNode>();

            GNode root = graph.GetNode(v1);

            if (root == null)
                throw new Exception("cannot find 1st node");

            queue.Enqueue(root);

            while (queue.Count > 0) {
                GNode cur = queue.Dequeue();
                cur.Visited = false;

                Dictionary<string, int> neighbors = cur.Neighbors;
                if (neighbors != null) {
                    foreach (string name in neighbors.Keys) {
                        GNode tmpNode = graph.Nodes[name];

                        if (name.Equals(v2)) {
                            canRoute = true;
                            Console.WriteLine("found:{0}", name);
                            break;
                        }
                        else {

                            if (!tmpNode.Visited) {
                                queue.Enqueue(tmpNode);
                                tmpNode.Visited = true;
                                Console.WriteLine("enqueue:{0}", tmpNode.Name);
                            }
                        }
                    }
                }
            }

            return canRoute;
        }