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

C++

Войти
Регистрация
Восстановить пароль
 
mykhail
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
#1

Можно ли просчитать дистанцию между переменными в map? - C++

08.04.2016, 16:26. Просмотров 271. Ответов 7
Метки нет (Все метки)

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
values.push_back(necessaryCoor) - - - - Вектор содержит только координаты
 points.push_back(newPoints) - - - Вектор содержит только айди для каждой координаты
 fullMap.insert(pair, vector>({ newPoints}, { necessaryCoor })); - -- -map содержит и айди и координату
 
for (auto it = fullMap.begin(); it != fullMap.end(); it++)
    {
        for (auto it1 = fullMap.begin(); it1 != fullMap.end(); it1++)
        {
            distance = (Мне нужно просчитать дистанцию между каждой координатой , потом найти минимальную дистанцию и вывести на экран айди дистанции. Допустим , если айди 5 и айди 10 имеет наименьшую дистанцию , я вывожу на экран их
        }
 
    }
 
Я сделал с вектором , но проблема , что он выдает мне только айди вектора. Если вектор содержит 3 переменные , то будет 0 , 1 , 2. А не 12,5,10.
 
for (int i = 0; i < values.size(); i++)
 
    {
        visited.push_back(false); // Добавляю что все переменные не посещены
    }`
 
    for (int i = 0; i < values.size();i++)//цикл
    {
        double Min2 = DBL_MAX;
        int x = 0;//использую х , потому что оно будет равно j
        for (int j = 0; j < values.size(); j++)//второй цикл
        {
            if (visited[j] == false)//проверяю , посещено или нет
            {
                distance = sqrt(pow((values[j].x2 - values[i].x2), 2) + pow((values[j].y2 - values[i].y2), 2));
                if (distance < Min2 && distance != 0) 
                {
                    Min2 = distance;
                    x = j;//как уже говорил , х будет связан с j
                }
            }
 
 
        }
        cout << i << " ";//Тут получается айди 0 
        cout << x << endl;//тут айди 2
        visited[i] = true;// Не посещаю больше координату 0
А после первого прохода цикла , у меня должно быть 0-145. Соединяет он правильно , но отображает именно айди вектора , а не айди которые нужны. Поэтому подумал , надо map , но как все это сделать используя map?
Спасибо заранее
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2016, 16:26     Можно ли просчитать дистанцию между переменными в map?
Посмотрите здесь:
Просчитать минимальную дистанцию между человеком и станциями C++
C++ Найти дистанцию между точками на плоскости (использовать перегруженный оператор)
Расстояние между переменными Visual C++
C++ отличия между static и auto переменными
Обмен значений между двумя вещественными переменными. C++
C++ Функция, которая выполняет обмен значений между двумя целочисленными переменными
C++ Функция interchange(), которая выполняет обмен значений между двумя переменными
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,300
08.04.2016, 18:39     Можно ли просчитать дистанцию между переменными в map? #2
Флаг посещения и сравнение с нулем не нужны - просто начинайте внутренний цикл с индекса равного индексу внешнего цикла плюс один. В время прохода обновляйте переменные мин_ид_1 мин_ид_2 и мин_дист объявленные перед внешним циклом если дистанция меньше мин_дист. Начальное значение можете взять от первых двух элементов. На выходе из внешнего цикла будут искомые значения. Мап не нужен
mykhail
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
08.04.2016, 19:16  [ТС]     Можно ли просчитать дистанцию между переменными в map? #3
Я убирал флаги. Проблема что у меня есть карта с двумя остановками , между ними была линия. Потом я добавил еще остановки по заданию и теперь мне надо построить снова линии уже между точками.
Допустим , у меня идет 1-216-115-157-23 , может быть 23-157 или 157-23 без разницы. Суть в другом.
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
for (int i = 0; i < values.size()-1;i++)
        {
            int result = 0;
            double Min2 = DBL_MAX;//если тут то оно работает, но выдает мне одну неправильную линию
            int k = 0;
            int x = 0;
            int y = 0;
            int z = 0;
            for (int j = i+1; j < values.size(); j++) 
            {
                            
                
                /* if (visited[j] == false)*/
                {
                    distance = sqrt(pow((values[j].x2 - values[i].x2), 2) + pow((values[j].y2 - values[i].y2), 2));
                    double Min2 = DBL_MAX;если она будет тут , он мне выдает неправильно
                    if (distance < Min2 && distance != 0) 
                    {
                        
                        Min2 = distance;
                        k = i;//тоже самое
                        x = j;//это я так решил их обновляю
                    }
                }
                
                
            }
И перед внешним я не могу поставить , так как есть 2 координаты , которые имеют самую большую дистанцию и если они будут заходить потом , то там вообще линии не будет
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,300
08.04.2016, 20:48     Можно ли просчитать дистанцию между переменными в map? #4
Я думаю настало время картинок ибо язык тут не помог
mykhail
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
08.04.2016, 21:38  [ТС]     Можно ли просчитать дистанцию между переменными в map? #5
И так первое фото это часть графика. Первая станция 1 потом 216 потом 115 потом 157 потом 23

Две фото с программы , твой метод и мой , дает одинаковые результаты .. Нет соединения между 216 и 115.. Если посмотреть на график , там самая длинная дистанция и поэтому он не хочет ее брать(
Но также если смотреть , он делает линию 157 - 216 где дистанция еще больше(
Изображения
   
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,300
09.04.2016, 08:06     Можно ли просчитать дистанцию между переменными в map? #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
double Min = DBL_MAX;
            int min_i1;
            int min_i2;
for (int i = 0; i < values.size();i++)
        {
            for (int j = i+1; j < values.size(); j++)
                    double distance = sqrt(pow((values[j].x2 - values[i].x2), 2) + pow((values[j].y2 - values[i].y2), 2));
                    
                    if (distance < Min) 
                    {
                        
                        Min= distance;
                        min_i1 = i;
                        min_i2 = j;
                    }
                }
                
                
            }
Добавлено через 3 минуты
Но. Это просто поиск наименьшей дистанции между ЛЮБЫМИ двумя точками набора. Телепатически мне стало понятно что должны рассматриваться только точки по определенному маршруту. По рисунку я телепатически догадываюсь что маршрут это не линия а некая сеть. Поэтому вопрос - как вы его храните?

Добавлено через 3 минуты
У каждого узла есть x y 1 2? То есть узел это не станция а палка? Ну тогда просто храните там же в этой палке id 1 2 и посчитайте для каждой палки дистанцию 1 2 и выведите минимальную (id 1 2 у вас уже будет так как он в палке).
mykhail
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
09.04.2016, 12:22  [ТС]     Можно ли просчитать дистанцию между переменными в map? #7
Не идея другая. Идея следующая и я уже сделал ее , только теперь я не могу понять , как мне лучше все сделать , потому что она не работает полностью .
Я захожу в цикл , беру первую станцию , захожу во второй , нахожу минимальную дистанцию (значит первая станция уже имеет соединение со второй ) , мне надо начать цикл со второй ( я это уже сделал , теперь другая проблема ( вторая станция находится в конце вектора ) и когда я запускаю начать цикл с ней ( у меня сразу идет выход из двух циклов ) и программа уже считает другие значения.

Как мне сделать так , чтобы она начинала со станции , которая была присоединена к предыдущей , но не выходила из вектора сразу?

Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2016, 15:41     Можно ли просчитать дистанцию между переменными в map?
Еще ссылки по теме:
C++ Можно ли проводить математические операции с переменными типа char?
Обращение к элементам vector, который находится в map, находящийся в map C++
C++ Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
C++ Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ?
C++ Как вставить map в map

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vxg
Модератор
3112 / 1914 / 206
Регистрация: 13.01.2012
Сообщений: 7,300
09.04.2016, 15:41     Можно ли просчитать дистанцию между переменными в map? #8
Расстояния между станциями никак не связаны с наличием дорог между ними. Как решил бы это я я вам написал. Ваши предложения кажутся мне сложными на ровном месте может я так и не понял задачу хз
Yandex
Объявления
09.04.2016, 15:41     Можно ли просчитать дистанцию между переменными в map?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru