В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
Adidasler05
Adidasler05
28.06.2021 11:57 •  Информатика

30 {для изучения океана планеты солярис было построено n исследовательских станций. каждая из станций задаётся координатами (xi, yi, zi) в пространстве. для быстрого перемещения между станциями запланировано построить n-1 телепорт, каждый из которых будет соединять две станции и позволит перемещаться между ними в произвольном направлении. набор телепортов должен соединять все станции, то есть так, чтобы с любой станции до любой другой можно было переместиться либо непосредственно через соединяющий их телепорт, либо использовав несколько телепортов с посещением произвольных станций. стоимость постройки телепорта между станциями i и j равна cij = min(|xi – xj|, |yi – yj|, |zi – zj|). напишите программу, которая по положению n исследовательских станций найти минимальную стоимость искомого набора телепортов. вход: файл input.txt, в первой строке содержится число n – количество исследовательских станций. в следующих n строках содержится описание очередной станции, задаваемой координатами (xi, yi, zi). координаты разделяются пробелом. ограничения: 2≤n≤105, -109≤ xi, yi, zi ≤109 выход: файл output.txt, в единственной строке содержится число – минимальная стоимость постройки набора телепортов.}язык c++

Показать ответ
Ответ:
N1R2
N1R2
04.10.2020 02:57
#include <stdio.h>

#define maxsize 105

typedef struct station{
    int x, y, z;
} station;

int abs(int x){
    return x >= 0 ? x : -x;
}

int min(int a, int b){
    return a <= b ? a : b;
}

int main(){
    FILE *ist, *ost;
    
    station s[maxsize];
    int w[maxsize][maxsize];
    int inc[maxsize];
    int n,i,j,k,m,l,r;
    
    ist = fopen("input.txt","r");
    
    fscanf(ist, "%d", &n);
    for(i = 0; i < n; i++) fscanf(ist, "%d %d %d", &s[i].x, &s[i].y, &s[i].z);
    
    fclose(ist);
    
    for(i = 0; i < n; i++) inc[i] = 0;
    
    for(i = 0; i < n; i++)
    for(j = i; j < n; j++)
        w[i][j] = w[j][i] = min(abs(s[i].x - s[j].x), min(abs(s[i].y - s[j].y), abs(s[i].z - s[j].z)) );
    
    r = 0; k = 1;
    inc[0] = 1;
    while(k < n){
        m = -1;
        for(i = 0; i < n; i++) if(inc[i])
        for(j = 0; j < n; j++) if(!inc[j])
            if (m == -1 || w[i][j] < m) m = w[i][j], l = j;
        r += m;
        inc[l] = 1;
        k++;
    }
    
    ost = fopen("output.txt","w");
    fprintf(ost,"%d", r);
    fclose(ost);
    
    return 0;
}
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота