Exemplo n.º 1
0
        ///<summary>遍历函数</summary>
        ///<param name="from">起点</param>
        ///<param name="to">终点</param>
        ///<param name="max">给定最大路车站数</param>
        ///<param name="nw">本例中用到的有向图</param>
        private void Traverse(Stop from, Stop to, NetWork nw, Double max)
        {
            from.Marked = true;

            foreach (Route v in nw.AdjRoutes(from))
            {
                //路径v入栈
                RouteStack.Add(v);
                //没有访问过且不是终点
                if (!v.Dest.IsMarked() && !v.Dest.Equals(to))
                {
                    //递归调用
                    Traverse(v.Dest, to, nw, max);
                }
                //访问到终点
                else if (v.Dest.Equals(to))
                {
                    if (RouteStack.Count <= max)
                    {
                        //将遍历出的结果存入
                        this.solu.AddResult(RouteStack);
                    }
                }
                else
                {
                    //访问过 且不是终点 就是说这是遍历中遇到了环 在本例中 因为每个节点只能访问一次 因此对这种情况不做处理
                }
                //路径v出栈
                RouteStack.Remove(v);
            }
            //遍历完毕 返回上一级 将该节点设置为未访问
            from.Marked = false;
        }