/// <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)); }
/// <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); }