acobzew

dz5

Dec 8th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include "stdlib.h"
  2. #include "stdio.h"
  3. #define N 100 // Максимальное кол-во вершин
  4. #define M 100 // Максимальное кол-во рёбер
  5.  
  6. struct Edge {
  7.   int v1, v2;
  8. };
  9.  
  10. int vertex[N];
  11. int vertexDegree[N] = {0};
  12. struct Edge graph[M];
  13.  
  14. int wall(int left, int right) {
  15.   int x = vertexDegree[vertex[left]];
  16.   int i = left + 1;
  17.   int j = right;
  18.   do {
  19.     while ((i <= j) && (vertexDegree[vertex[i]] <= x))
  20.         i++;
  21.     while ((i <= j) && (vertexDegree[vertex[j]] >= x))
  22.         j--;
  23.     if (i < j) {
  24.       int temp1;
  25.       temp1 = vertex[i];
  26.       vertex[i] = vertex[j];
  27.       vertex[j] = temp1;
  28.       i++;
  29.       j--;
  30.     }
  31.   } while (i < j);
  32.   int temp2;
  33.   temp2 = vertex[left];
  34.   vertex[left] = vertex[j];
  35.   vertex[j] = temp2;
  36.   return j;
  37. }
  38.  
  39. void quick_sort(int begin, int end) {
  40.   int k;
  41.   if (begin < end) {
  42.       k = wall(begin, end);
  43.       quick_sort(begin, k - 1);
  44.       quick_sort(k + 1, end);
  45.   }
  46. }
  47.  
  48. int main() {
  49.   int n, m, i, j, v1, v2;
  50.   printf("Количество вершин: ");
  51.   scanf("%d", &n);
  52.   printf("Количество рёбер: ");
  53.   scanf("%d", &m);
  54.   printf("Рёбра:\n");
  55.   for (i = 0; i < m; i++) {
  56.     scanf("%d %d", &v1, &v2);
  57.     if (v1 <= 0 || v1 > n || v2 <= 0 || v2 > n) {
  58.       printf("Недопустимый номер вершины.\n");
  59.       return 1;
  60.     }
  61.     graph[i].v1 = v1 - 1;
  62.     graph[i].v2 = v2 - 1;
  63.     vertexDegree[v1 - 1]++;
  64.     vertexDegree[v2 - 1]++;
  65.   }
  66.  
  67.   printf("Удаление ребра. Введите номер ребра: ");
  68.   scanf("%d", &j);
  69.   if (j <= 0 || j > m) {
  70.     printf("Недопустимый номер ребра.\n");
  71.     return 1;
  72.   }
  73.   vertexDegree[graph[j - 1].v1]--;
  74.   vertexDegree[graph[j - 1].v2]--;
  75.   graph[j - 1].v1 = graph[j - 1].v2 = -1;
  76.   printf("Ребро удалено\n");
  77.  
  78.   for (i = 0; i < n; i++)
  79.     vertex[i] = i;
  80.  
  81.   quick_sort(0, n - 1);
  82.  
  83.   for (i = n - 1; i >= 0; i--)
  84.     printf("%d: %d\n", vertex[i] + 1, vertexDegree[vertex[i]]);
  85.  
  86.   return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment