Advertisement
Elsas

Algo10B

Mar 29th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. double inf = 40000;
  9.  
  10. double SpanTree(const vector<pair<long long, long long>> &vert)
  11. {
  12.     double dist = 0;
  13.     vector<int> used(vert.size(), 0);
  14.     vector<double> mindist(vert.size(), inf);
  15.     mindist[0] = 0;
  16.     int v = 0;
  17.  
  18.     for (int i = 0; i < vert.size(); i++)
  19.     {
  20.         int minind = v;
  21.         double tmp = inf;
  22.         used[v] = 1;
  23.         dist += mindist[v];
  24.  
  25.         for (int j = 0; j < vert.size(); j++)
  26.         {
  27.             if (!used[j])
  28.             {
  29.                 double wayvj = sqrt(pow(vert[v].first - vert[j].first, 2) + pow(vert[v].second - vert[j].second, 2));
  30.  
  31.                 if (wayvj < mindist[j])
  32.                     mindist[j] = wayvj;
  33.                 if (mindist[j] < tmp)
  34.                 {
  35.                     minind = j;
  36.                     tmp = mindist[j];
  37.                 }
  38.             }
  39.         }
  40.         v = minind;
  41.     }
  42.  
  43.  
  44.     return dist;
  45. }
  46.  
  47. int main()
  48. {
  49.     ifstream fcin("spantree.in");
  50.     ofstream fcout("spantree.out");
  51.  
  52.     int n;
  53.     fcin >> n;
  54.  
  55.     vector<pair<long long, long long>> vert(n);
  56.  
  57.     for (int i = 0; i < n; i++)
  58.         fcin >> vert[i].first >> vert[i].second;
  59.  
  60.     fcout << fixed << setprecision(6);
  61.     fcout << SpanTree(vert);
  62.  
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement