Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

задача ШКОЛЫ (описание внутри) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не получается присвоить значение двумерному массиву char http://www.cyberforum.ru/cpp-beginners/thread847921.html
объявляю двумерный массив (массив массивов в char для хранения имен файлов) в cpp файле char m_fname ; я хочу инициализировать первый элемент m_fname = "name name name name name"; ...
C++ вычисление определенного интеграла методом трапеций с точностью eps Прошу строго не судить. Только начинаю изучать с++. Написал вот такую программку и не могу понять что не так с синтексисом. #include <stdio.h> #include "stdafx.h" #include <math.h> #include... http://www.cyberforum.ru/cpp-beginners/thread847914.html
Изменение положения формы при нажатии кнопки C++
На форме есть кнопка jump. Как сделать так, чтобы при нажатии на неё один раз окно меняло место положение, а при нажатие второй раз возвращалось в исходное?
Дана строка, содержащая два слова, разделённых пробелом, вывести неповторяющиеся буквы слов. C++
Срочно до утра нужно построить несколько алгоритмов на С++. Кто может помогите! Вот задания: 2.Дана строка, содержащая два слова, разделённых пробелом, вывести неповторяющиеся буквы слов. Пример:...
C++ Имеются два текстовых файла с одинаковым числом строк. Выяснить совпадают ли их строки http://www.cyberforum.ru/cpp-beginners/thread847882.html
Срочно до утра нужно построить несколько алгоритмов на С++. Кто может помогите! Вот задания: 3.Имеются два текстовых файла с одинаковым числом строк (нумирация начинается с 1). Выяснить совпадают...
C++ Из данной строки удалите наименьшее количество символов, так, чтобы получился палиндром Срочно до утра нужно построить несколько алгоритмов на С++. Кто может помогите! Вот задания: 4.Из данной строки удалите наименьшее количество символов, так, чтобы получился палиндром (строка,... подробнее

Показать сообщение отдельно
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
22.05.2013, 18:59
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <climits>
#include <iostream>
using std::cout;
using std::endl;
 
#include <fstream>
using std::ifstream;
using std::ofstream;
 
int N,M;
bool *points;
int *ribsPointsOrigIndex;
bool firstCall=true;
int countSave;
ofstream output("output.txt");
 
int minPrice(int ribsPrice[], int ribsPoint1[], int ribsPoint2[])
{
    for (int i=0;i<N;i++)
        points[i]=false;
 
    int sum=0;
 
    points[0]=true;
    int count=N;
    int min,minpoint1,minpoint2,index;
    while (--count)
    {
        min=301;
        for (int i=0;i<M;i++)
        {
            if (points[ribsPoint1[i]-1]!=points[ribsPoint2[i]-1])
                if (ribsPrice[i]<min)
                {
                    min=ribsPrice[i];
                    minpoint1=ribsPoint1[i];
                    minpoint2=ribsPoint2[i];
                    index=i;
                }
        }
        if (min==301 && firstCall)
        {
            output<<"Error: impossible to connect the points";
            exit(0);
        }
        sum+=min;
        points[minpoint1-1]=true;
        points[minpoint2-1]=true;
 
        if (firstCall)
        {
            ribsPointsOrigIndex[countSave]=index;
            countSave++;
        }
    }
    
    return sum;
}
 
int main()
{
    ifstream input("input.txt");
    input>>N>>M;
 
    int* ribsPrice=new int[M];
    int* ribsPoint1=new int[M];
    int* ribsPoint2=new int[M];
    ribsPointsOrigIndex=new int[M];
 
    points=new bool[N];
 
    for (int i=0;i<M;i++)
    {
        input>>ribsPoint1[i]>>ribsPoint2[i]>>ribsPrice[i];
    }
 
    output<<minPrice(ribsPrice,ribsPoint1,ribsPoint2);
 
    firstCall=false;
    int min2=INT_MAX;
    for (int i=0;i<countSave;i++)
    {
        int index=ribsPointsOrigIndex[i];
        int buf1=ribsPoint1[index];
        int buf2=ribsPoint2[index];
        ribsPoint1[index]=101;
        ribsPoint2[index]=101;
        int minPriceRes=minPrice(ribsPrice,ribsPoint1,ribsPoint2);
        if (minPriceRes<min2)
            min2=minPriceRes;
        ribsPoint1[index]=buf1;
        ribsPoint2[index]=buf2;
    }
 
    output<<" "<<min2;
 
    input.close();
    output.close();
 
    delete[] ribsPrice;
    delete[] ribsPoint1;
    delete[] ribsPoint2;
    delete[] ribsPointsOrigIndex;
    delete[] points;
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru