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

Дан набор координат точек. Начиная с первой, проложить кратчайший маршрут.... - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ SDK VC++ http://www.cyberforum.ru/cpp-beginners/thread155045.html
я новичок в C++ ..... пишу програму для опредиления железа(процессор, озу и т.п) у меня установлен VC++ Express Edition 2005.... у меня постоянно возникают проблемы с <windows.h> - у меня етого файла воопше нет... искал в инете - понял что нада установить SDK,но не знаю как с етим разобратся(етих SDK много,а какой мне нужен незнаю)....
C++ квадрат Добрый вечер, подскажите как из это сделать квадрат 4х4? #include <iostream> using namespace std; void main () { int n=4; int m=4; for(int i=0; i<n; i++) http://www.cyberforum.ru/cpp-beginners/thread155037.html
Warning! Source file is not compiled! C++
создаю абстрактный класс ABCd #ifndef _ABCD_H_ #define _ABCD_H_ class ABCd { private: char performers; char label; int selections; double playtime;
list.push_back ошибка! C++
Только начинаю писать на C++. Помогите пожалуйста разобраться в ламерской ошибке! В классе инициализирую list<CProgressCtrl>. Затем в методе пытаюсь положить в неё объект и получаю ошибку компиляции error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'. В чем может быть дело? list<CProgressCtrl> m_observers; void...
C++ Работа с указателями в ООП http://www.cyberforum.ru/cpp-beginners/thread155016.html
Столкнулся впервые с указателями, используемыми в подобном примере. Для них не нужно задавать максимальное кол-во элементов, правильно понимаю? В коде выделил курсивом вопросы, относящиеся к пониманию процесса работы с указателями. Кто имеет время 10 - 15 минут, ответьте, пожалуйста, на вопросы достаточно глубоко для правильного понимания. Спасибо #include <iostream> #include <cstdlib>...
C++ решите задания по массивам 1. Вывести на печать все слова, составляющие не более чем из пяти букв. 2. Преобразовать строчную букву в заглавную русского алфавита с А до Б 3. Для матрицы n*m ,n меньше или равно 10, m меньше или равно 15 и в этой матрице исключить все строки,соединяющее нулевые элементы СПАСИБО! подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
23.07.2010, 21:22     Дан набор координат точек. Начиная с первой, проложить кратчайший маршрут....
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/////////////////////////////////////////////////////////////////////////////
//Дан набор координат точек. Начиная с первой, проложить кратчайший маршрут, 
//который позволил бы посетить их все по одному разу.
/////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <complex>
#include <iostream>
#include <numeric>
#include <vector>
 
typedef double                 T_coord;
typedef std::complex<T_coord>  T_point;
typedef T_coord                T_dist;
typedef T_point                T_shift;
typedef std::vector<T_shift>   T_shifts;
/////////////////////////////////////////////////////////////////////////////
struct T_numbered_point : T_point
{
    //-----------------------------------------------------------------------
    int  num_;
    //-----------------------------------------------------------------------
    T_numbered_point
        (
            T_point  point,
            int      num           
        ) 
        : T_point(point), 
          num_   (num)
    {}
    //-----------------------------------------------------------------------
    T_shift operator- (const T_numbered_point&  np)//Для алгоритма std::adjacent_difference
    {        
        return T_point(*this) - np;                
    }
    //-----------------------------------------------------------------------        
    bool operator < (const T_numbered_point&  np)//Для алгоритма  std::next_permutation.
    {
        return num_ < np.num_;
    }
    //-----------------------------------------------------------------------    
};
/////////////////////////////////////////////////////////////////////////////
typedef std::vector<T_numbered_point>   T_numbered_points;
/////////////////////////////////////////////////////////////////////////////
T_numbered_points  input_numbered_points()
{
    const int  POINTS_TOTAL_MIN = 2;
    int        points_total;    
    do
    {
        std::cout << "Введите количество точек >= "
                  << POINTS_TOTAL_MIN   
                  << ": ";
        std::cin >> points_total;
    }while(points_total < POINTS_TOTAL_MIN);
    
    std::cout << "Введите координаты "
              << points_total
              << " различных точек:"
              << std::endl;
    
    T_numbered_points  numbered_points;
    
    while(   numbered_points.empty()
          || numbered_points.size() != points_total)
    {        
        int point_num = numbered_points.size() + 1;
        std::cout << "X" 
                  << point_num
                  << " = ";
        int x;
        std::cin >> x;
        std::cout << "Y" 
                  << point_num
                  << " = ";
        int y;
        std::cin >> y;                
        T_numbered_point  numbered_point(T_point(x, y), point_num);
        if( !numbered_points.empty()
            && std::find(numbered_points.begin(), 
                         numbered_points.end(), 
                         numbered_point) != numbered_points.end() )
        {
             std::cout << "Такая точка уже есть."
                       << std::endl;       
        }
        else
        {
            numbered_points.push_back(numbered_point);
        }
        std::cout << std::endl;
    }    
    return  numbered_points;
}
/////////////////////////////////////////////////////////////////////////////
void print_optim_posledov_obchoda(const T_numbered_points&  numbered_points)
{    
    T_numbered_points  temp_numbered_points(numbered_points);    
    T_shifts           shifts(numbered_points.size());
    T_numbered_points  numbered_points_v_optim_posledov;
    T_dist             dist_sum_min;
    bool               dist_sum_min_is_init = false;
    do
    {
        std::adjacent_difference(temp_numbered_points.begin(), 
                                 temp_numbered_points.end(), shifts.begin());
 
        struct T_dist_sum
        {
            T_dist operator() (const T_shift& p1, const T_shift& p2)
            {
                return abs(p1) + abs(p2);
            }
        };   
 
        T_dist  dist_sum = std::accumulate(shifts.begin() + 1, shifts.end(), 
                                           T_dist(), T_dist_sum());
        if(!dist_sum_min_is_init
           || dist_sum < dist_sum_min)
        {
            dist_sum_min                      = dist_sum;
            dist_sum_min_is_init              = true;
            numbered_points_v_optim_posledov  = temp_numbered_points;
        }
    }while
         ( 
             std::next_permutation
                 (
                     temp_numbered_points.begin() + 1, 
                     temp_numbered_points.end()                     
                 ) 
         );
 
    struct T_print_point_num
    {
        void operator() (T_numbered_points::value_type  numbered_point)
        {
            std::cout << numbered_point.num_
                      << ' ';
        }
    };
 
    std::cout << "Минимальный путь обхода "
              << numbered_points.size()
              << " заданных точек в последовательности "
              << std::endl;
    
    std::for_each(numbered_points_v_optim_posledov.begin(),
                  numbered_points_v_optim_posledov.end(), T_print_point_num());    
 
    std::cout << std::endl
              << "равен "
              << dist_sum_min
              << "."
              << std::endl;
}
/////////////////////////////////////////////////////////////////////////////
 
int main()
{    
    std::locale::global(std::locale(""));
    T_numbered_points  numbered_points = input_numbered_points();
    print_optim_posledov_obchoda(numbered_points);   
    return 0;
}
 
Текущее время: 02:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru