public Node[] FindShortestPath(Node @from, Node to) { var control = new VisitingData(); control.UpdateWeight(@from, new Weight(null, 0)); control.ScheduleVisitTo(@from); while (control.HasScheduledVisits) { var visitingNode = control.GetNodeToVisit(); var visitingNodeWeight = control.QueryWeight(visitingNode); control.RegisterVisitTo(visitingNode); foreach (var neighborhoodInfo in visitingNode.Neighbors) { if (!control.WasVisited(neighborhoodInfo.Node)) { control.ScheduleVisitTo(neighborhoodInfo.Node); } var neighborWeight = control.QueryWeight(neighborhoodInfo.Node); var probableWeight = (visitingNodeWeight.Value + neighborhoodInfo.WeightToNode); if (neighborWeight.Value > probableWeight) { control.UpdateWeight(neighborhoodInfo.Node, new Weight(visitingNode, probableWeight)); } } } return(control.HasComputedPathToOrigin(to) ? control.ComputedPathToOrigin(to).Reverse().ToArray() : null); }
public static RouteResult BestRouteProcess(Route origin, Route destination) { var control = new VisitingData(); control.UpdateFlightPrice(origin, new RouteCost(null, 0)); control.ScheduleVisitTo(origin); while (control.HasScheduledVisits) { var visitingRoute = control.GetRouteToVisit(); var visitingFlightPrice = control.FlightPrice(visitingRoute); control.RegisterVisitTo(visitingRoute); foreach (var connectionInfo in visitingRoute.Connections) { if (!control.WasVisited(connectionInfo.Airport)) { control.ScheduleVisitTo(connectionInfo.Airport); } var connectionCost = control.FlightPrice(connectionInfo.Airport); var probablePrice = (visitingFlightPrice.Price + connectionInfo.Price); if (connectionCost.Price > probablePrice) { control.UpdateFlightPrice(connectionInfo.Airport, new RouteCost(visitingRoute, probablePrice)); } } } RouteResult result = new RouteResult(); var cost = control.FlightPrice(destination); result.TotalCost = cost.Price; result.Routes = cost.From == null ? null : control.GetEntireRoute(destination).Reverse().ToList(); return(result); }
public async Task <IEnumerable <VisitingData> > GetAnotherData() { //Dictionary<string, int> data = new Dictionary<string, int>(); List <VisitingData> data = new List <VisitingData>(); string userString = HttpContext.Session.GetString("Login"); userString = userString != null ? userString : ""; StatisticFake statfake = new StatisticFake(); List <RabbitModels.RabbitStatistic> result = new List <RabbitModels.RabbitStatistic>(); var corrId = string.Format("{0}{1}", DateTime.Now.Ticks, Thread.CurrentThread.ManagedThreadId); string request; byte[] responseMessage; using (var client = new HttpClient()) { client.BaseAddress = new Uri(URLStatisticService); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); string requestString = "api/statistics"; HttpResponseMessage response = await client.GetAsync(requestString); request = "SERVICE: ArenaService \r\nGET: " + URLStatisticService + "/" + requestString + "\r\n" + client.DefaultRequestHeaders.ToString(); string responseString = response.Headers.ToString() + "\nStatus: " + response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { responseMessage = await response.Content.ReadAsByteArrayAsync(); var json = await response.Content.ReadAsStringAsync(); result = JsonConvert.DeserializeObject <List <RabbitModels.RabbitStatistic> >(json); statfake.statistic = result; } else { responseMessage = Encoding.UTF8.GetBytes(response.ReasonPhrase); SendStatistic("Default", DateTime.Now, "GetData", Request.HttpContext.Connection.RemoteIpAddress.ToString(), false, userString); //return BadRequest(); } await LogQuery(request, responseString, responseMessage); //Передаем список доступных городов с ID (для дальнейшей сверки) SendStatistic("Default", DateTime.Now, "Statistic", Request.HttpContext.Connection.RemoteIpAddress.ToString(), true, userString); //return View(statfake); } foreach (RabbitModels.RabbitStatistic item in result) { if (item.Action == "Index") { bool found = false; foreach (VisitingData dataItem in data) { if (item.User == dataItem.user) { dataItem.visits++; found = true; } } if (!found) { VisitingData dataItem = new VisitingData() { user = item.User, visits = 1 }; data.Add(dataItem); } } } var chartData = new object[data.Count + 1]; chartData[0] = new object[] { "user", "visits" }; int j = 0; foreach (var i in data) { j++; chartData[j] = new object[] { i.user, i.visits }; } //return new JsonResult(chartData); return(data); }