using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using JNPF.Common.Extension; using JNPF.Templates; using Microsoft.AspNetCore.Mvc; using NPOI.SS.Formula.Functions; using Spire.Doc; using Tnb.WarehouseMgr.Entities; namespace Tnb.WarehouseMgr { /// /// 动态规划类 /// public class Dp { private HashSet set = new HashSet(); /// /// 动态规划函数 /// /// public void DpFunc(List roads, List pointIds, Dictionary isVisited, string sPointId, string ePointId, dynamic ArrivedEpoint) { var sRoads = roads.FindAll(x => x.startpoint_id == sPointId).ToList(); var sRoads_EPointIds = sRoads.Select(x => x.endpoint_id).ToList(); if (!isVisited[sPointId]) { pointIds.Add(sPointId); set.Add(roads?.Find(x => x.startpoint_id == sPointId)?.startpoint_code!); isVisited[sPointId] = true; } if (sRoads_EPointIds.Contains(ePointId)) //判断是否到达终点 { ArrivedEpoint.isArrivedEpoint = true; pointIds.Add(ePointId); foreach (var kvp in isVisited) { isVisited[kvp.Key] = true; } return; } if (sRoads_EPointIds?.Count > 0) { var subRoads = roads?.FindAll(x => sRoads_EPointIds.Contains(x.startpoint_id) && !isVisited[x.endpoint_id]); if (subRoads?.Count > 0) { for (int i = 0; i < subRoads.Count; i++) { var sIdx = subRoads[i].startpoint_id; if (!isVisited[sIdx]) { DpFunc(roads, pointIds, isVisited, sIdx, ePointId, ArrivedEpoint); } } } } if (!ArrivedEpoint.isArrivedEpoint) { pointIds.Remove(sPointId); } } } }