Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. package graph;
  2.  
  3. import static java.util.Arrays.fill;
  4.  
  5. /**
  6. * Created by dmitry_boltacev on 16.03.17.
  7. */
  8. public class Main {
  9.  
  10.  
  11. static int array[][] = { {1, 2, 1},
  12. {2, 3, 1},
  13. {2, 5, 3},
  14. {1, 3, 2},
  15. {3, 5, 1},
  16. {2, 4, 1},
  17. {5, 6, 2}};
  18.  
  19. // static int array[][] = { {1, 3, 1}, {1, 2, 10}, {2, 4, 5}, {3, 6, 1}, {1, 5, 1}, {5, 7, 20}, {6, 7, 1}};
  20. // static int array[][] = { {1, 3, 1}, {1, 2, 10}, {1, 4, 10}, {1, 5, 20}, {2, 3, 1}, {2, 4, 1}, {2, 5, 1}, {3, 4, 1}, {3, 5, 1}, {4, 5, 1}};
  21.  
  22.  
  23. static int n = countVertex(array); // вершины
  24. static int m = array.length;// ребра
  25.  
  26. public static void main(String[] args) {
  27.  
  28. System.out.println(n);
  29.  
  30. int matrix[][] = new int[n][n];
  31.  
  32. for (int i = 0; i < n; i ++) {
  33. for (int j = 0; j < n; j ++) {
  34. matrix[i][j] = 0;
  35. }
  36. }
  37.  
  38. for (int i = 0; i < m; i ++) {
  39. int l = array[i][0] - 1; // 0
  40. int k = array[i][1] - 1; // 1
  41. matrix[l][k] = array[i][2];
  42. matrix[k][l] = array[i][2];
  43. }
  44.  
  45. int way[] = new int [100];
  46.  
  47. int model = deykstra(matrix); //эталон
  48.  
  49. int countWays = 0;
  50.  
  51. for (int i = 0; i < m; i ++) {
  52. int l = array[i][0]-1; // 0
  53. int k = array[i][1]-1; // 1
  54. matrix[l][k] -= array[i][2];
  55. matrix[k][l] -= array[i][2];
  56.  
  57. way[i] = deykstra(matrix);
  58.  
  59. matrix[l][k] = array[i][2];
  60. matrix[k][l] = array[i][2];
  61.  
  62. if(way[i] != model) {
  63. countWays++;
  64. }
  65. }
  66.  
  67. System.out.println(countWays);
  68.  
  69.  
  70. for (int i = 0; i < m; i ++) {
  71. if (way[i] != model)
  72. System.out.print(i + 1 + " ");
  73. }
  74.  
  75. }
  76.  
  77. private static int countVertex(int [][]array) {
  78. int v = 0;
  79.  
  80. for (int i = 0; i < array.length; i++)
  81. if (array[i][1] > array[i][0])
  82. v = array[i][1];
  83. return v;
  84. }
  85.  
  86. private static int deykstra(int matrix[][]) {
  87.  
  88. int d[] = new int[n]; // минимальное расстояние
  89. int v[] = new int[n]; // посещенные вершины
  90.  
  91. int temp;
  92. int min, minindex;
  93.  
  94. for (int i = 0; i < n; i++) {
  95. d[i] = 10000;
  96. v[i] = 1;
  97. }
  98.  
  99. d[0] = 0;
  100.  
  101. do {
  102. minindex = 10000;
  103. min = 10000;
  104. for (int i = 0; i < n; i++) {
  105. if ((v[i]) == 1 && (d[i] < 10000)) {
  106. min = d[i];
  107. minindex = i;
  108. break;
  109. }
  110. }
  111.  
  112. if (minindex != 10000)
  113. {
  114. for (int i = 0; i < n; i++)
  115. {
  116. if (matrix[minindex][i] > 0)
  117. {
  118. temp = min + matrix[minindex][i];
  119. if (temp < d[i])
  120. d[i] = temp;
  121. }
  122. }
  123. v[minindex] = 0;
  124. }
  125. } while (minindex < 10000);
  126.  
  127. return d[n - 1];
  128.  
  129. }
  130.  
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement