Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Kruskall.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- int A[10][10];
- int T[2][10];
- int S[10];
- int n;
- bool Srav() {
- int i;
- for (i = 2; i <= n; i++) {
- if (S[i] != S[1]) return 0;
- }
- return 1;
- }
- void min(int &k, int &t) {
- int min = 100;
- for (int i = 1; i <= n; i++) {
- for (int j = i+1; j <= n; j++) {
- if (A[i][j] < min) {
- min = A[i][j];
- k = i;
- t = j;
- }
- }
- }
- A[k][t] = 100;
- A[t][k] = 100;
- }
- void Kruskall(int n) {
- int i, k, v1, v2;
- k = 1;
- for (i = 1; i <= n; i++) {
- S[i] = i;
- }
- while (!Srav()) {
- min(v1, v2);
- if (S[v1] != S[v2]) {
- T[0][k] = v1;
- T[1][k] = v2;
- k++;
- int ss = S[v2];
- for (int j = 1; j <= n; j++) {
- if (S[j] == ss) S[j] = S[v1];
- }
- }
- }
- cout << endl;
- for (int i = 0; i < 2; i++) {
- for (int j = 1; j < n; j++) {
- cout << T[i][j] << " ";
- }
- cout << endl;
- }
- }
- int main()
- {
- setlocale(0, "");
- int m, x, y, c;
- cout << " кол-во ребер, вершин " << endl;
- cin >> m;
- cin >> n;
- for (int i = 1; i <= n; i++)
- for (int j = 1; j <= n; j++)
- A[i][j] = 100;
- for (int i = 1; i <= m; i++) {
- cin >> x >> y >> c;
- A[x][y] = c;
- A[y][x] = c;
- }
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j <= n; j++)
- cout << A[i][j] << " ";
- cout << endl;
- }
- Kruskall(n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement