public static List <EveSystem> GetShortestPath(int startingSystemId, int endingSystemId) { var path = new Dictionary <EveSystem, EveSystem>(); var visitedHash = new HashSet <int>(); Queue <EveSystem> queue = new Queue <EveSystem>(); queue.Enqueue(SystemIdToSolarSystem[startingSystemId]); visitedHash.Add(startingSystemId); while (queue.Count > 0) { EveSystem currentSystem = queue.Dequeue(); foreach (var systemId in currentSystem.Connections) { if (visitedHash.Contains(systemId)) { continue; } visitedHash.Add(systemId); var currentChild = SystemIdToSolarSystem[systemId]; path[currentChild] = currentSystem; if (currentSystem.SolarSystemId == endingSystemId) { break; } queue.Enqueue(currentChild); } } var shortestPath = new List <EveSystem>(); var current = SystemIdToSolarSystem[endingSystemId]; while (current != SystemIdToSolarSystem[startingSystemId]) { shortestPath.Add(current); current = path[current]; } shortestPath.Add(SystemIdToSolarSystem[startingSystemId]); shortestPath.Reverse(); return(shortestPath); }
public void Save(string d, dynamic dy) { dynamic data = dy; for (int i = 0; i < data.eveSystems.Count; i++) { var ds = new EveSystem(); ds.name = data.eveSystems[i].name; ds.id = data.eveSystems[i].id; ds.adms = new List <Adm>(); var adml = new List <Adm>(); for (int ii = 0; ii < data.eveSystems[i].adms.Count; ii++) { var adm = new Adm(); adm.name = data.eveSystems[i].adms[ii].name; adm.id = data.eveSystems[i].adms[ii].id; adml.Add(adm); } eveSystems.Add(ds); } }