示例#1
0
        /** 計算フラグのリセット。
         */
        public void ResetCalcFlag(Fee.Dijkstra.Instance_Base a_instance)
        {
            this.prev_node = null;

            this.nodedata.SetTotalCost(a_instance, -1);
            this.nodedata.SetCalcFlag(a_instance, false);
        }
示例#2
0
 /** 計算フラグのリセット。
  */
 public void ResetCalcFlag(Fee.Dijkstra.Instance_Base a_instance)
 {
     foreach (System.Collections.Generic.KeyValuePair <NODEKEY, Node <NODEKEY, NODEDATA, LINKDATA> > t_pair in this.node_list)
     {
         t_pair.Value.ResetCalcFlag(a_instance);
     }
     this.calc_list.Clear();
 }
示例#3
0
        /** 開始ノードに設定。
         */
        public void SetStartNode(Fee.Dijkstra.Instance_Base a_instance, Node <NODEKEY, NODEDATA, LINKDATA> a_node_start)
        {
            //開始ノードとしてコストを設定。
            a_node_start.SetStartCost(a_instance);

            //計算リストに追加。
            this.calc_list.Add(a_node_start);
            a_node_start.SetCalcFlag(a_instance, true);
        }
示例#4
0
        /** 到達コストが最小のノードを検索。
         */
        private static Node <NODEKEY, NODEDATA, LINKDATA> FindMinCostNode(Fee.Dijkstra.Instance_Base a_instance, System.Collections.Generic.List <Node <NODEKEY, NODEDATA, LINKDATA> > a_calc_list)
        {
            Node <NODEKEY, NODEDATA, LINKDATA> t_find_node = null;

            foreach (Node <NODEKEY, NODEDATA, LINKDATA> t_node in a_calc_list)
            {
                if (t_find_node == null)
                {
                    t_find_node = t_node;
                }
                else if (t_node.GetTotalCost(a_instance) < t_find_node.GetTotalCost(a_instance))
                {
                    t_find_node = t_node;
                }
            }

            return(t_find_node);
        }
示例#5
0
        /** 計算。
         *
         *      return == true : 継続。
         *
         */
        public bool Calc(Fee.Dijkstra.Instance_Base a_instance)
        {
            //到達コストが最小のノードを検索。
            Node <NODEKEY, NODEDATA, LINKDATA> t_node_current = Dijkstra <NODEKEY, NODEDATA, LINKDATA> .FindMinCostNode(a_instance, this.calc_list);

            if (t_node_current == null)
            {
                return(false);
            }
            else
            {
                //未計算リストから削除。
                this.calc_list.Remove(t_node_current);
                t_node_current.SetCalcFlag(a_instance, false);
            }

            //隣接ノード計算開始。
            System.Collections.Generic.List <Link <NODEKEY, NODEDATA, LINKDATA> > t_linklist_current = t_node_current.GetLinkList();
            for (int ii = 0; ii < t_linklist_current.Count; ii++)
            {
                Node <NODEKEY, NODEDATA, LINKDATA> t_node = t_linklist_current[ii].GetToNode();
                long t_total_cost = t_node_current.GetTotalCost(a_instance) + t_linklist_current[ii].GetToCost(a_instance);
                if ((t_node.GetTotalCost(a_instance) < 0) || (t_node.GetTotalCost(a_instance) > t_total_cost))
                {
                    //このノードへ到達するための隣接ノード。
                    t_node.SetTotalCost(a_instance, t_total_cost);
                    t_node.SetPrevNode(t_node_current);

                    //計算リストに追加。
                    if (t_node.GetCalcFlag(a_instance) == false)
                    {
                        this.calc_list.Add(t_node);
                        t_node.SetCalcFlag(a_instance, true);
                    }
                }
            }

            return(true);
        }
示例#6
0
 /** 到達コスト。取得。
  */
 public long GetTotalCost(Fee.Dijkstra.Instance_Base a_instance)
 {
     return(this.nodedata.GetTotalCost(a_instance));
 }
示例#7
0
 /** 開始ノードとしてコストを設定。
  */
 public void SetStartCost(Fee.Dijkstra.Instance_Base a_instance)
 {
     this.nodedata.SetTotalCost(a_instance, 0);
 }
示例#8
0
 /** 計算フラグ。取得。
  */
 public bool GetCalcFlag(Fee.Dijkstra.Instance_Base a_instance)
 {
     return(this.nodedata.GetCalcFlag(a_instance));
 }
示例#9
0
 /** 計算フラグ。設定。
  */
 public void SetCalcFlag(Fee.Dijkstra.Instance_Base a_instance, bool a_flag)
 {
     this.nodedata.SetCalcFlag(a_instance, a_flag);
 }
示例#10
0
 /** 到達コスト。設定。
  */
 public void SetTotalCost(Fee.Dijkstra.Instance_Base a_instance, long a_totalcost)
 {
     this.nodedata.SetTotalCost(a_instance, a_totalcost);
 }
示例#11
0
 /** 接続先ノードへの到達コスト。取得。
  */
 public long GetToCost(Fee.Dijkstra.Instance_Base a_instance)
 {
     return(this.linkdata.GetToCost(a_instance));
 }
示例#12
0
 /** 接続先ノードへの到達コスト。設定。
  */
 public void SetToCost(Fee.Dijkstra.Instance_Base a_instance, long a_to_cost)
 {
     this.linkdata.SetToCost(a_instance, a_to_cost);
 }