| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using WCS.Core;namespace WCS.Core{     public class DevicePath    {        public string From { get; set; } = "";        public string To { get; set; } = "";        List<string> points = new List<string>();        public List<Device> Points        {            get             {                var list = points.Select(v => Device.Find(v)).ToList();                return list;            }        }        public static DevicePath[] GetPaths(string from, string to)        {            var all = Device.All.ToDictionary(v => v.Code, v => v.Targets.Select(d => d.Code).ToList());            List<List<string>> pathList = new List<List<string>>();            recursion(from, to, all, pathList, new List<string>());            pathList.ForEach(path => path.Remove(from));            var arr = pathList.Select(v => new DevicePath { From = from, To = to, points = v }).ToArray();            return arr;        }        public static DevicePath? GetPath(string from, string to)        {            return GetPaths(from, to).OrderBy(v => v.Points.Count).FirstOrDefault();        }        static void recursion(string from, string to, Dictionary<string, List<string>> all,List<List<string>> pathList, List<string> points)        {            if (points.Count > 100)                return;            points.Add(from);            if (from == to)            {                pathList.Add(points);                return;            }            if (!all.ContainsKey(from))            {                return;            }            foreach (var code in all[from])            {                if (points.Contains(code))                    continue;                recursion(code, to, all, pathList, new List<string>(points));            }        }    }}
 |