C# Есть код алгоритма Дейкстры на C++, как его можно преобразовать на язык C#?

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication1
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. const int N = 1000; // количество вершин
  12. // матрица смежности: adj_matrix[i][j] == true,
  13. // если между вершинами i и j существует ребро
  14. bool adj_matrix = [N][N];
  15. int cost = new int [N][N]; // веса рёбер
  16. /*********************************************/
  17. /*********Результаты работы алгоритма*********/
  18. int dist = new int [N]; // расстояния от заданной вершины
  19. int parent = new int [N]; // из какой вершины пришли;
  20. // служит для восстановления маршрута
  21. void dijkstra(int start);
  22. }
  23. /*********************************************/
  24. // start -- вершина, от которой считаем расстояния
  25. public static void dijkstra(int start)
  26. {
  27. // in_tree[i] == true, если для вершины i
  28. // уже посчитано минимальное расстояние
  29. bool in_tree[N] = {false};
  30. for(int i = 0; i < N; i++)
  31. dist[i] = INT_MAX; // машинная бесконечность,
  32. // т. е. любое расстояние будет меньше данного
  33. dist[start] = 0; // понятно почему, не так ли? ;)
  34. int cur = start; // вершина, с которой работаем
  35. // пока есть необработанная вершина
  36. while(!in_tree[cur])
  37. {
  38. in_tree[cur] = true;
  39. for(int i = 0; i < N; i++)
  40. {
  41. // если между cur и i есть ребро
  42. if(adj_matrix[cur][i])
  43. {
  44. // считаем расстояние до вершины i:
  45. // расстояние до cur + вес ребра
  46. int d = dist[cur] + cost[cur][i];
  47. // если оно меньше, чем уже записанное
  48. if(d < dist[i])
  49. {
  50. dist[i] = d; // обновляем его
  51. parent[i] = cur; // и "родителя"
  52. }
  53. }
  54. }
  55. // ищем нерассмотренную вершину
  56. // с минимальным расстоянием
  57. int min_dist = INT_MAX;
  58. for(int i = 0; i < N; i++)
  59. {
  60. if(!in_tree[i] && dist[i] < min_dist)
  61. {
  62. cur = i;
  63. min_dist = dist[i];
  64. }
  65. }
  66. }
  67. // Теперь:
  68. // в dist[i] минимальное расстояние от start до i
  69. // в parent[i] вершина, из которой лежит оптимальный путь в i
  70. }
  71. }
  72. }

Решение задачи: «C# Есть код алгоритма Дейкстры на C++, как его можно преобразовать на язык C#?»

textual
Листинг программы
  1.         public Node Previous { get; set; }
  2.         public double Price { get; set; }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы