Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- using namespace std;
- const int INF = 1e9;
- struct Point{
- int x;
- int y;
- };
- double diistance(int x1, int y1, int x2, int y2){
- double a = x1;
- double b = x2;
- double c = y1;
- double d = y2;
- return sqrt(pow(a - b,2)/1.0 + pow(c - d,2)/1.0);
- }
- int main() {
- int n;
- cin >> n;
- Point vertexes[5000];
- for (int i = 0; i < n; ++i){
- int x;
- int y;
- cin >> x >> y;
- Point a;
- a.x = x;
- a.y = y;
- vertexes[i] = a;
- }
- vector <double> d(n*(n-1)/2,INF);
- bool used[5000];
- int p[5000];
- for (int i = 0; i < 5000; ++i){
- used[i] = false;
- p[i] = -1;
- }
- d[0] = 0;
- int last_v;
- for (int i = 0; i < n; ++i){
- int v = -1;
- for (int j = 0; j < n - 1; ++j){
- if (!used[j] && (v == -1 || d[v] > d[j]))
- v = j;
- used[v] = true;
- for (int z = 0; z < n; ++z){
- int u = z;
- double w = diistance(vertexes[v].x,vertexes[v].y,vertexes[u].x,vertexes[u].y);
- if (!used[u] && d[u] > w && u!= v){
- d[u] = w;
- p[u] = v;
- last_v = u;
- cout << "Расстояние из вершины " << v << " в вершину " << u <<" равно " << w << endl;
- }
- }
- }
- }
- double summ = 0;
- for (int i = 0; i < n; ++i){
- cout << d[i] << endl;
- }
- cout << summ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement