ParanoidPanda

Untitled

Dec 22nd, 2015
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. #include "all.h"
  2.  
  3. void doall(){
  4. int start, size = 7;
  5. int **array = (int **)malloc(size*sizeof(int*));
  6. for (int i = 0; i<size; i++)
  7. array[i] = (int*)malloc(size*sizeof(int));
  8. char patch[20];
  9. FILE *fp;
  10. fp = fopen("graph.txt", "r+");
  11. if (fp != NULL)
  12. {
  13. for (int i = 0; i<size; i++)
  14. {
  15. for (int j = 0; j<size; j++)
  16. fscanf(fp, "%d ", &array[i][j]);
  17. }
  18. fclose(fp);
  19. for (int start = 0; start<size; start++)
  20. doit(array, start, size);
  21. free(array);
  22. system("pause");
  23. }
  24. else
  25. {
  26. printf("Невозможно открыть файл %s, пожалуйста укажите правильное имя файла\n", patch);
  27. free(array);
  28. exit(0);
  29. }
  30. }
  31.  
  32. void doit(int **GR, int st, int size)
  33. {
  34. int count, index, i, u, m = st + 1;
  35. int*distance = (int *)malloc(size*sizeof(int));
  36. bool*visited = (bool *)malloc(size*sizeof(bool));
  37. int*check = (int *)malloc(size*sizeof(int));
  38. for (i = 0; i<size; i++)
  39. {
  40. distance[i] = INT_MAX; visited[i] = false; check[i] = INT_MAX;
  41. }
  42. distance[st] = 0;
  43. for (count = 0; count<size - 1; count++)
  44. {
  45. int min = INT_MAX;
  46. for (i = 0; i<size; i++)
  47. if (!visited[i] && distance[i] <= min)
  48. {
  49. min = distance[i]; index = i;
  50. }
  51. u = index;
  52. visited[u] = true;
  53. for (i = 0; i<size; i++)
  54. if (!visited[i] && GR[u][i] && distance[u] != INT_MAX && distance[u] + GR[u][i]<distance[i])
  55. {
  56. if (GR[u][i] <= -1)
  57. {
  58. check[i] = 0;
  59. }
  60. else if (GR[u][i]>0)
  61. check[i] = 1;
  62. distance[i] = distance[u] + GR[u][i];
  63. }
  64. }
  65. printf("Стоимость пути из заданой вершины до остальных:\t\n");
  66. for (i = 0; i<size; i++)
  67. {
  68. if (distance[i] != INT_MAX)
  69. {
  70. if (check[i] == 0)
  71. {
  72. printf("%d -> %d = %d\t Маршрут имеет отрицательную стоимость!\n", m, i + 1, distance[i]);
  73. }
  74. else if (check[i] == 1)
  75. {
  76. printf("%d -> %d = %d\n", m, i + 1, distance[i]);
  77. }
  78. }
  79. else
  80. printf("%d -> %d = Маршрут недоступен\n", m, i + 1);
  81. }
  82. free(distance);
  83. free(visited);
  84. free(check);
  85.  
  86. }
Add Comment
Please, Sign In to add comment