Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7.  
  8.  
  9. namespace Dijkstry
  10. {
  11. class Program
  12. {
  13.  
  14. static void Djk(int[][] tablica, int startowy, int wierzcholki)
  15. {
  16. StreamWriter sw = new StreamWriter("Out0304.txt");
  17. int[][] D = new int[wierzcholki - 1][];
  18. int min = 100, i = 0, pom = 0, pom2 = 1;
  19. int poprzednik_nr = 0;
  20. int[] Dist = new int[wierzcholki];
  21. int[] Pred = new int[wierzcholki];
  22. Pred[startowy-1] = -1;
  23. for (i = 0; i < wierzcholki; i++) //uzupelnienie dystansu -1
  24. Dist[i] = -1;
  25. Dist[startowy - 1] = 0; //dla startowego zawsze 0
  26. for (i = 0; i < wierzcholki - 1; i++)
  27. D[i] = new int[wierzcholki];
  28. for (int j = 0; j < wierzcholki - 1; j++)
  29. {
  30. min = 100;
  31. for (int k = 0; k < wierzcholki; k++)
  32. {
  33. if (j == 0)
  34. {
  35. D[j][k] = tablica[startowy - 1][k]; //pierwsza linia przepisanie dla startu
  36. if (min > tablica[startowy - 1][k]) //wyszukanie minimum
  37. {
  38. min = tablica[startowy - 1][k];
  39. poprzednik_nr = k; //nr dla minimum
  40. }
  41.  
  42. }
  43. else
  44. {
  45. if (Dist[k] == -1) // jezeli wierzcholek jeszcze nie wystapil to zadziala
  46. {
  47. if (D[j - 1][k] <= tablica[pom2][k] + pom) //uzupelnienie dikstry
  48. {
  49. D[j][k] = D[j - 1][k];
  50. if (min > D[j][k])
  51. {
  52. min = D[j][k];
  53. poprzednik_nr = k;
  54.  
  55. }
  56. }
  57. else
  58. {
  59. D[j][k] = tablica[pom2][k] + pom;
  60. if (min > D[j][k])
  61. {
  62. min = D[j][k];
  63. poprzednik_nr = k;
  64. }
  65. }
  66. }
  67. }
  68. }
  69. if (j == 0){
  70. Pred[poprzednik_nr] = startowy;
  71. pom = min;
  72. pom2 = poprzednik_nr;
  73. Dist[poprzednik_nr] = min;
  74. }
  75. else {
  76.  
  77.  
  78. if (min != tablica[pom2][poprzednik_nr] + pom) // jezeli wartosc sie nie zmienia predykat tez nie
  79. Pred[poprzednik_nr] = Pred[pom2];
  80. else Pred[poprzednik_nr] = pom2 + 1;
  81.  
  82. pom = min;
  83. pom2 = poprzednik_nr;
  84. Dist[poprzednik_nr] = min;
  85. }
  86. }
  87.  
  88. for (i = 0; i < wierzcholki; i++)
  89. sw.Write(Dist[i] + " ");
  90. sw.WriteLine();
  91. for (i = 0; i < wierzcholki; i++)
  92. sw.Write(Pred[i] + " ");
  93.  
  94. sw.Close();
  95. }
  96. static void Main(string[] args)
  97. {
  98. int[][] tablica = null;
  99. StreamReader sr = new StreamReader("In0304.txt");
  100. int wierzcholki = 0, startowy = 0; ;
  101. int i = 0, j = 0;
  102. string w = null;
  103. string[] pom = null;
  104. while (!sr.EndOfStream)
  105. {
  106. w = sr.ReadLine();
  107. pom = w.Split(' ');
  108. if (pom.Length == 2)
  109. {
  110. wierzcholki = Int32.Parse(pom[0]); startowy = Int32.Parse(pom[1]);
  111. tablica = new int[wierzcholki][];
  112. for (i = 0; i < wierzcholki; i++)
  113. tablica[i] = new int[wierzcholki];
  114. i = 0;
  115. }
  116. else
  117. {
  118. j = 0;
  119. while (j < pom.Length)
  120. {
  121.  
  122. tablica[i][j] = Int32.Parse(pom[j]);
  123. j++;
  124. }
  125.  
  126. i++;
  127. }
  128. }
  129. Djk(tablica, startowy, wierzcholki);
  130. Console.ReadLine();
  131. sr.Close();
  132. }
  133. }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement