Информатика, опубликовано 2018-08-22 22:12:41 by Гость

Дам 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++

Ответ оставил Гость

#include

#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 }

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     
    fclose(ist);
    
    for(i = 0; i     
    for(i = 0; i     for(j = i; 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         m = -1;
        for(i = 0; i         for(j = 0; j             if (m == -1 || w[i][j]         r += m;
        inc[l] = 1;
        k++;
    }
    
    ost = fopen("output.txt","w");
    fprintf(ost,"%d", r);
    fclose(ost);
    
    return 0;
}

Не нашли ответа?
Если вы не нашли ответа на свой вопрос, или сомневаетесь в его правильности, то можете воспользоваться формой ниже и уточнить решение. Или воспользуйтесь формой поиска и найдите похожие ответы по предмету Информатика.

Форма вопроса доступна на полной версии этой страницы.