CherMi

Lab4 0.2

Feb 24th, 2020
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.44 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3.  
  4. #define INF 10000
  5.  
  6. int find_min(int S[15], int D[15], int N);
  7.  
  8. int main()
  9. {
  10.     int i, j, tmp;
  11.     int N = 15; //Количество вершин
  12.     int matrix[15][15] = //Матрица смежности
  13.     { {INF, 15, INF, INF, INF, INF, INF, INF, 10, 50, INF, INF, INF, INF, INF},
  14.     {INF, INF, 20, 10, 30, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF},
  15.     {INF, INF, INF, INF, INF, 40, INF, INF, INF, INF, INF, INF, INF, INF, INF},
  16.     {INF, INF, INF, INF, 60, INF, INF, INF, 50, INF, INF, INF, INF, INF, INF},
  17.     {INF, INF, INF, INF, INF, INF, 5, INF, INF, INF, INF, INF, INF, INF, INF},
  18.     {INF, INF, INF, INF, INF, INF, 10, INF, INF, INF, INF, INF, INF, INF, INF},
  19.     {INF, INF, INF, INF, INF, INF, INF, 10, INF, INF, INF, INF, INF, INF, INF},
  20.     {INF, INF, INF, INF, INF, INF, INF, INF, INF, 25, 5, INF, INF, INF, INF},
  21.     {INF, INF, INF, INF, INF, INF, INF, 15, INF, INF, INF, INF, INF, INF, INF},
  22.     {INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 15, INF, INF},
  23.     {INF, INF, INF, INF, INF, INF, INF, INF, INF, 45, INF, INF, INF, INF, INF},
  24.     {INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 15, INF, INF, INF, INF},
  25.     {INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 35, INF, 30, INF},
  26.     {INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 40},
  27.     {10, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF}};
  28.     int nu, target;
  29.     int S[15] = { 0 };
  30.     int D[15] = { 0 };
  31.  
  32.     for (i = 0; i < N; i++)
  33.     {
  34.         printf("\t%d", i + 1);
  35.     }
  36.     printf("\n");
  37.     for (i = 0; i < N; i++)
  38.     {
  39.         printf("%d\t", i + 1);
  40.         for (j = 0; j < N; j++)
  41.         {
  42.             tmp = (matrix[i][j] == INF) ? 0 : matrix[i][j];
  43.             printf("%d\t", tmp);
  44.         }
  45.         printf("\n");
  46.     }
  47.     printf("Dejkstra's algorithm:\n");
  48.     printf("Enter start vertex nu: ");
  49.     scanf("%d", &nu);
  50.     printf("Enter target vertex: ");
  51.     scanf("%d", &target);
  52.  
  53.     S[nu - 1] = 1; //Включаем вершину nu в S
  54.  
  55.     for (i = 0; i < N; i++)
  56.     {
  57.         if (i == nu)
  58.         {
  59.             D[i] = 0;
  60.             continue;
  61.         }
  62.         D[i] = matrix[0][i]; //TODO: посмотреть, какую строку записываем относительно nu
  63.     }
  64.  
  65.     for (i = 0; i < N; i++)
  66.     {
  67.         tmp = find_min(S, D, N);
  68.     }
  69.     return 0;
  70. }
  71.  
  72. int find_min(int S[15], int D[15], int N)
  73. {
  74.     int result = -1;
  75.     int min = INF;
  76.     int i;
  77.  
  78.     for (i = 0; i < N; i++)
  79.     {
  80.         if (S[i] == 1) continue;
  81.         if (D[i] < min)
  82.         {
  83.             min = D[i];
  84.             result = i;
  85.         }
  86.     }
  87.     return result;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment