Advertisement
Guest User

Lab3

a guest
Dec 15th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.81 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     setlocale(LC_ALL, (("RUSSIAN")));
  9.     int GRAPH1[9][9] = {
  10.     {0,7,5,0,8,6,0,0,0},
  11.     {7,0,0,2,4,0,0,0,0},
  12.     {5,0,0,0,0,14,0,0,0},
  13.     {0,2,0,0,1,0,10,0,0},
  14.     {8,4,0,1,0,15,2,11,5},
  15.     {6,0,14,0,15,0,0,9,0},
  16.     {0,0,0,10,2,0,0,3,6},
  17.     {0,0,0,0,11,9,3,0,12},
  18.     {0,0,0,0,5,0,6,12,0} };
  19.     int Punkti[9] = { 0,0,0,0,0,0,0,0,0 };
  20.     int Svazi[36];
  21.     int Svazinomera[36];
  22.     int Svazinomera2[9][9];
  23.     int i, j, i1 = 0, i2, t = 0, i0 = 0, a, b,k;
  24.     for (i = 0;i < 9;i++)
  25.     {
  26.         for(j=0;j<9;j++)
  27.         {
  28.             Svazinomera2[i][j] = 0;
  29.         }
  30.     }
  31.     cout << "Вывод матрицы с ценами проезда. Строки - пункт отправления, столбцы - пункт назначения, 0 - дороги нет";
  32.     cout << "\n";
  33.     for (i = 0;i < 9;i++)//Вывод матрицы
  34.         cout << "\t" << "V" << i + 1;
  35.     for (i = 0;i < 9;i++)
  36.     {
  37.         for (j = 0;j < 9;j++)
  38.         {
  39.             if (j == 0) cout << "\nV" << i + 1 << "\t" << GRAPH1[i][j];
  40.             else cout << "\t" << GRAPH1[i][j];
  41.         }
  42.     }//Конец вывода матрицы и поиск элементов остовного дерева
  43.     cout << "\nАлгоритм Крускала" << endl;
  44.     for (i = 0;i < 9;i++)
  45.     {
  46.         for (j = i + 1;j < 9;j++)
  47.         {
  48.             Svazi[i1] = GRAPH1[i][j];
  49.             Svazinomera[i1] = i * 10 + j;
  50.             i1++;
  51.         }
  52.     }
  53.     for (i1 = 0;i1 < 36;i1++)//Вывод полного списка связей между пунктами (если равно 0, то связи нет)
  54.     {
  55.         cout << "\nV" << Svazinomera[i1] / 10 << "-V" << Svazinomera[i1] % 10 << ":\t" << Svazi[i1] << "\t" << Svazinomera[i1];
  56.     }
  57.     for (i = 0;i < 35;i++)
  58.         for (i1 = 0;i1 < 35;i1++)
  59.         {
  60.             if (Svazi[i1] == 0)
  61.             {
  62.                 t = Svazi[i1];
  63.                 Svazi[i1] = Svazi[i1 + 1];
  64.                 Svazi[i1 + 1] = t;
  65.                 t = Svazinomera[i1];
  66.                 Svazinomera[i1] = Svazinomera[i1 + 1];
  67.                 Svazinomera[i1 + 1] = t;
  68.             }
  69.         }
  70.     cout << "\n";
  71.     for (i1 = 0;i1 < 36;i1++)
  72.     {
  73.         if (Svazi[i1] == 0)
  74.         {
  75.             i0++;
  76.         }
  77.     }
  78.     for (i = 0;i < 35 - i0;i++)
  79.         for (i1 = 0;i1 < 35 - i0;i1++)
  80.         {
  81.             if (Svazi[i1] > Svazi[i1 + 1])
  82.             {
  83.                 t = Svazi[i1];
  84.                 Svazi[i1] = Svazi[i1 + 1];
  85.                 Svazi[i1 + 1] = t;
  86.                 t = Svazinomera[i1];
  87.                 Svazinomera[i1] = Svazinomera[i1 + 1];
  88.                 Svazinomera[i1 + 1] = t;
  89.             }
  90.         }
  91.     cout << "\nВывод рёбер";
  92.     for (i1 = 0;i1 < 36 - i0;i1++)//Вывод рёбер, которыми связаны пункты, в порядке увеличения их длины
  93.     {
  94.         cout << "\nV" << Svazinomera[i1] / 10 + 1 << "-V" << Svazinomera[i1] % 10 + 1 << ":\t" << Svazi[i1] << "\t" << Svazinomera[i1] + 11;
  95.     }
  96.     for (i1 = 0;i1 < 36 - i0;i1++)
  97.     {
  98.         k = 0;
  99.         a = Svazinomera[i1] / 10;
  100.         b = Svazinomera[i1] % 10;
  101.         for(j=0;j<9;j++)
  102.         {
  103.             if ((Svazinomera2[a][j] > 0) && (Svazinomera2[j][b] > 0))
  104.             {
  105.                 k++;
  106.         } }
  107.         if (((Punkti[a] >=2) && (Punkti[b] >= 1))||((Punkti[a] >= 1)&&(Punkti[b] >= 2))||((Punkti[a] >= 1) && (Punkti[b] >= 1)&&(k>0)))
  108.         {
  109.             Svazi[i1] = 0;
  110.         }
  111.         else
  112.         {
  113.             Punkti[a]++;
  114.             Punkti[b] ++;
  115.             Svazinomera2[a][b]++;
  116.             Svazinomera2[b][a]++;
  117.         }
  118.     }
  119.     for (i = 0;i < 35;i++)
  120.         for (i1 = 0;i1 < 35;i1++)
  121.         {
  122.             if (Svazi[i1] == 0)
  123.             {
  124.                 t = Svazi[i1];
  125.                 Svazi[i1] = Svazi[i1 + 1];
  126.                 Svazi[i1 + 1] = t;
  127.                 t = Svazinomera[i1];
  128.                 Svazinomera[i1] = Svazinomera[i1 + 1];
  129.                 Svazinomera[i1 + 1] = t;
  130.             }
  131.         }
  132.     {for (i0 = 0, i1 = 0;i1 < 36;i1++)
  133.         if (Svazi[i1] == 0)
  134.         {
  135.             i0++;
  136.         }
  137.     }
  138.     cout << "\nЭлементы дерева";//Вывод элементов дерева
  139.     for (i1 = 0;i1 < 36 - i0;i1++)
  140.     {
  141.         cout << "\nV" << Svazinomera[i1] / 10+1 << "-V" << Svazinomera[i1] % 10+1 << ":\t" << Svazi[i1] << "\t" << Svazinomera[i1]+11;
  142.     }
  143.  
  144.     for (i1=0;i1<9;i1++)
  145.     {
  146.         cout << "\n" << Punkti[i1];
  147.     }
  148.     cout << endl;
  149.     system("pause");
  150.     return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement