Advertisement
Guest User

Kruskall

a guest
Jun 18th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. // Kruskall.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6.  
  7. using namespace std;
  8.  
  9. int A[10][10];
  10. int T[2][10];
  11. int S[10];
  12. int n;
  13.  
  14.  
  15.  
  16.  
  17. bool Srav() {
  18.     int i;
  19.     for (i = 2; i <= n; i++) {
  20.         if (S[i] != S[1]) return 0;
  21.     }
  22.     return 1;
  23. }
  24.  
  25. void min(int &k, int &t) {
  26.     int min = 100;
  27.     for (int i = 1; i <= n; i++) {
  28.         for (int j = i+1; j <= n; j++) {
  29.             if (A[i][j] < min) {
  30.                 min = A[i][j];
  31.                 k = i;
  32.                 t = j;
  33.             }
  34.         }
  35.     }
  36.     A[k][t] = 100;
  37.     A[t][k] = 100;
  38. }
  39.  
  40. void Kruskall(int n) {
  41.     int i, k, v1, v2;
  42.     k = 1;
  43.     for (i = 1; i <= n; i++) {
  44.         S[i] = i;
  45.     }
  46.    
  47.     while (!Srav()) {
  48.    
  49.         min(v1, v2);
  50.         if (S[v1] != S[v2]) {
  51.             T[0][k] = v1;
  52.             T[1][k] = v2;
  53.             k++;
  54.             int ss = S[v2];
  55.             for (int j = 1; j <= n; j++) {
  56.                 if (S[j] == ss) S[j] = S[v1];
  57.             }
  58.         }
  59.     }
  60.     cout << endl;
  61.     for (int i = 0; i < 2; i++) {
  62.         for (int j = 1; j < n; j++) {
  63.             cout << T[i][j] << " ";
  64.         }
  65.         cout << endl;
  66.     }
  67. }
  68.  
  69.  
  70.  
  71.  
  72. int main()
  73. {
  74.     setlocale(0, "");
  75.     int m, x, y, c;
  76.     cout << " кол-во ребер, вершин " << endl;
  77.     cin >> m;
  78.     cin >> n;
  79.     for (int i = 1; i <= n; i++)
  80.         for (int j = 1; j <= n; j++)
  81.             A[i][j] = 100;
  82.     for (int i = 1; i <= m; i++) {
  83.         cin >> x >> y >> c;
  84.         A[x][y] = c;
  85.         A[y][x] = c;
  86.     }
  87.  
  88.     for (int i = 1; i <= n; i++) {
  89.         for (int j = 1; j <= n; j++)
  90.             cout << A[i][j] << " ";
  91.         cout << endl;
  92.     }
  93.     Kruskall(n);
  94.  
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement