Ejemplo n.º 1
0
        public static void BFS(string End)
        {
            if (queue.Count() == 0)
            {
                return;
            }
            Tuple <String, Route> tuple = queue.Dequeue();

            Vertex vertex = g.getVertex(tuple.Item1);

            Route route = tuple.Item2;

            if (vertex.Equals(g.getVertex(End)))
            {
                isFound = true;
            }

            if (!isFound)
            { /* 현재 vertex에서 이동 가능한 vertex들을 모드 Queue에 추가함 */
                foreach (Edge e in vertex.getAdjList())
                {
                    //queue.Enqueue(g.getVertex(e.getTo()));
                    Route newRoute = new Route(route);

                    if (e.weight <= 0)
                    {
                        continue;
                    }

                    newRoute.AddRoute(e);

                    Tuple <String, Route> nextTuple = new Tuple <String, Route>(e.to, newRoute);
                    queue.Enqueue(nextTuple);
                }
            }
            else if (isFound)
            {
                if (MAXOFMIN < route.getMinEdge())
                {
                    MAXOFMIN  = route.getMinEdge();
                    lastRoute = route;
                }
            }

            route.printRoute();

            BFS(End);
        }
Ejemplo n.º 2
0
        public static void CreateMaterial(JOB job)
        {
            #region BFS로 Routing
            { /* BFS하기 전에 초기화 */
                queue.Clear();
                isFound   = false;
                MAXOFMIN  = EnumClass.MINNUM;
                lastRoute = null;
            }
            // Start Vertex를 queue에 집어넣는다.
            queue.Enqueue(new Tuple <String, Route>(job.source, new Route(job.source)));

            Console.WriteLine("BFS 시작");
            Console.WriteLine("");

            BFS(job.terminal);
            #endregion BFS로 Routing

            #region Routing 결과
            Console.WriteLine("");
            Console.WriteLine("MaxOfMin(최소유량 중 최대값) = {0}", MAXOFMIN);
            Console.Write("가장 한가한 경로 : ");
            lastRoute.printRoute();
            #endregion Routing 결과

            #region 물류 객체 생성
            Material newMaterial;
            switch (job.MaterialType)
            {
            case MATERIAL_TYPE.DEFAULT_MATERIAL:
                newMaterial = new DefaultMaterial(lastRoute);
                break;

            default:
                newMaterial = new DefaultMaterial(lastRoute);
                break;
            }
            #endregion 물류 객체 생성

            #region Routing경로 사용
            Console.WriteLine("");
            Console.WriteLine("경로 사용..");
            try
            {
                lastRoute.useRoute(g);
            }
            catch (RouteException re)
            {
                Console.WriteLine(re.Message);
            }
            finally
            {
                Console.WriteLine("경로 사용 완료!");
                Console.WriteLine("----------------------");

                Console.WriteLine("경로 설정된 후의 Graph");
                Console.WriteLine("");
                g.printGraph();
            }

            #endregion Routing경로 사용
        }