Algorithms.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace DrawGraph
  7. {
  8. public class Algorithms
  9. {
  10. public static int MinDistance(int[] path, bool[] includedToPath, int n)
  11. {
  12. // Initialize min value
  13. int min = int.MaxValue, min_index = -1;
  14. for (int v = 0; v < n; v++)
  15. if (includedToPath[v] == false && path[v] <= min)
  16. {
  17. min = path[v];
  18. min_index = v;
  19. }
  20. return min_index;
  21. }
  22. public static int DijkstraCount(int[,] adjacencyMatrix, int startIndex, int finishIndex)
  23. {
  24. int n = adjacencyMatrix.GetLength(0);
  25. int[] path = new int[n];
  26. bool[] includedToShortestPath = new bool[n];
  27. for (int i = 0; i < n; i++)
  28. {
  29. path[i] = int.MaxValue;
  30. includedToShortestPath[i] = false;
  31. }
  32. path[startIndex] = 0;
  33. for (int i = 0; i < n - 1; i++)
  34. {
  35. int min = MinDistance(path, includedToShortestPath, n);
  36. includedToShortestPath[min] = true;
  37. for (int j = 0; j < n; j++)
  38. {
  39. if (!includedToShortestPath[j] && adjacencyMatrix[min, j] != 0 &&
  40. path[min] + adjacencyMatrix[min, j] < path[j])
  41. {
  42. path[j] = path[min] + adjacencyMatrix[min, j];
  43. }
  44. }
  45. }
  46. return path[finishIndex];
  47. }
  48. }
  49. }