예제 #1
0
        /// <summary>
        /// 查找两点间的最短路径(路径权重和最小)
        /// </summary>
        /// <param name="src_id">出发点ID</param>
        /// <param name="dst_id">目标点ID</param>
        /// <param name="lines">已知的所有连接线</param>
        /// <returns>最短路径的连接线</returns>
        public bool FindRoad(string src_id, string dst_id, IEnumerable <ILine> enu_lines, out List <ILine> lst_result)
        {
            //初始化缓存
            this.dct_lines.Clear();
            this.dct_relate.Clear();
            foreach (ILine item in enu_lines)
            {
                this.dct_lines[string.Format("{0}.{1}", item.SrcId, item.DstId)] = item;
                ILine item1 = new TestLine(item.DstId, item.SrcId, item.Weight); //反向
                this.dct_lines[string.Format("{1}.{0}", item.SrcId, item.DstId)] = item1;
                _PutRelatingPoint(item.SrcId, item.DstId);
                _PutRelatingPoint(item.DstId, item.SrcId);
            }
            List <string> lst_visited = new List <string>();

            return(_Find(src_id, dst_id, lst_visited, out lst_result));
        }
예제 #2
0
 /// <summary>
 /// 查找两点间的最短路径(路径权重和最小)
 /// </summary>
 /// <param name="src_id">出发点ID</param>
 /// <param name="dst_id">目标点ID</param>
 /// <param name="lines">已知的所有连接线</param>
 /// <returns>最短路径的连接线</returns>
 public bool FindRoad(string src_id, string dst_id, IEnumerable<ILine> enu_lines, out List<ILine> lst_result)
 {
     //初始化缓存
     this.dct_lines.Clear();
     this.dct_relate.Clear();
     foreach (ILine item in enu_lines)
     {
         this.dct_lines[string.Format("{0}.{1}", item.SrcId, item.DstId)] = item;
         ILine item1 = new TestLine(item.DstId, item.SrcId, item.Weight); //反向
         this.dct_lines[string.Format("{1}.{0}", item.SrcId, item.DstId)] = item1;
         _PutRelatingPoint(item.SrcId, item.DstId);
         _PutRelatingPoint(item.DstId, item.SrcId);
     }
     List<string> lst_visited = new List<string>();
     return _Find(src_id, dst_id, lst_visited, out lst_result);
 }