Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- using namespace std;
- struct agent
- {
- int x;
- int y;
- };
- double dist(agent A, agent B)
- {
- int x = A.x - B.x;
- int y = A.y - B.y;
- return sqrt(x * x + y * y);
- }
- int main()
- {
- int n,x, y;
- cin >> n;
- vector<struct agent> agents(n);
- for (int i = 0; i < n; ++i)
- {
- cin >> agents[i].x;
- cin >> agents[i].y;
- }
- vector<vector<double> > g(n, vector<double>(n));
- for (int i = 0; i < n; ++i)
- {
- for (int j = i + 1; j < n; ++j)
- {
- double d = dist(agents[i], agents[j]);
- g[i][j] = d;
- g[j][i] = d;
- //cout << "d= " << d << " "<< i <<" " << j << endl;
- }
- }
- /*
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- cout << g[i][j] << " ";
- }
- cout << endl;
- }
- */
- const int INF = 1000000001; // значение "бесконечность"
- vector<bool> used(n); //означает, что вершина i включена в остов
- vector<double> min_e(n, INF); //хранит вес наименьшего допустимого ребра из вершины в остов
- min_e[0] = 0;
- double R = 0;
- for (int i = 0; i < n; ++i) //делаем всего n шагов
- {
- int v = -1;
- //чтобы выборрать миним ребро, надо просмотреть эти минимальные рёбра у каждой не выбранной
- //ещё вершины
- for (int j = 0; j < n; ++j)
- if (!used[j] && (v == -1 || min_e[j] < min_e[v])) //выбирает вершину v с наименьшей меткой
- v = j; // помечает её
- if (R < min_e[v])
- R = min_e[v];
- cout << "curr_R = " << R << endl;
- cout << "v= " << v << " min_e = " << min_e[v] << endl;
- used[v] = true;
- for (int to = 0; to < n; ++to) { //просматривает все рёбра из этой вершины, пересчитывая их метки.
- cout << "g[v][to] = " << g[v][to] << endl;
- if (g[v][to] < min_e[to]) { // g[i][j] - расстоение между агентами i j
- min_e[to] = g[v][to];
- cout << "min_e " << min_e[to] << endl;
- }
- }
- }
- for (int i = 1; i < n; ++i)
- cout << min_e[i] << " ";
- //if (min_e[0] > min_e[i])
- //min_e[0] = min_e[i];
- cout << "R = " << min_e[0];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment