Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19

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

08.04.2016, 16:26. Показов 1228. Ответов 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?
Спасибо заранее
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2016, 16:26
Ответы с готовыми решениями:

Просчитать минимальную дистанцию между человеком и станциями
Привет , всем. Скажите пожалуйста , у меня дипломная по проектированию полного маршрута автобусов. И у меня сейчас возникла проблема ,...

Интересная задача на дистанцию между кривыми
Сразу скажу, что задача не совсем учебная. Дело в том, что я часто, когда куда-то долго иду (до метро, например) в уме придумываю разные...

Как проверить дистанцию между игроком и объектами?
Как проверить дистанцию между игроком и объектами с определенным тегом, то есть у меня есть объекты с тегом AI, и мне надо проверить какой...

7
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
08.04.2016, 18:39
Флаг посещения и сравнение с нулем не нужны - просто начинайте внутренний цикл с индекса равного индексу внешнего цикла плюс один. В время прохода обновляйте переменные мин_ид_1 мин_ид_2 и мин_дист объявленные перед внешним циклом если дистанция меньше мин_дист. Начальное значение можете взять от первых двух элементов. На выходе из внешнего цикла будут искомые значения. Мап не нужен
0
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
08.04.2016, 19:16  [ТС]
Я убирал флаги. Проблема что у меня есть карта с двумя остановками , между ними была линия. Потом я добавил еще остановки по заданию и теперь мне надо построить снова линии уже между точками.
Допустим , у меня идет 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 координаты , которые имеют самую большую дистанцию и если они будут заходить потом , то там вообще линии не будет
0
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
08.04.2016, 20:48
Я думаю настало время картинок ибо язык тут не помог
0
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
08.04.2016, 21:38  [ТС]
И так первое фото это часть графика. Первая станция 1 потом 216 потом 115 потом 157 потом 23

Две фото с программы , твой метод и мой , дает одинаковые результаты .. Нет соединения между 216 и 115.. Если посмотреть на график , там самая длинная дистанция и поэтому он не хочет ее брать(
Но также если смотреть , он делает линию 157 - 216 где дистанция еще больше(
Изображения
   
0
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
09.04.2016, 08:06
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 у вас уже будет так как он в палке).
0
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 19
09.04.2016, 12:22  [ТС]
Не идея другая. Идея следующая и я уже сделал ее , только теперь я не могу понять , как мне лучше все сделать , потому что она не работает полностью .
Я захожу в цикл , беру первую станцию , захожу во второй , нахожу минимальную дистанцию (значит первая станция уже имеет соединение со второй ) , мне надо начать цикл со второй ( я это уже сделал , теперь другая проблема ( вторая станция находится в конце вектора ) и когда я запускаю начать цикл с ней ( у меня сразу идет выход из двух циклов ) и программа уже считает другие значения.

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

Спасибо
0
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
09.04.2016, 15:41
Расстояния между станциями никак не связаны с наличием дорог между ними. Как решил бы это я я вам написал. Ваши предложения кажутся мне сложными на ровном месте может я так и не понял задачу хз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2016, 15:41
Помогаю со студенческими работами здесь

Перевести код на Delphi | Получаем угол между точками и дистанцию
Всем Доброго Времени Суток. Нужна помощь светил этого форума. Помогите перевести код на Delphi. double p_x = 80; double p_y =...

Найти дистанцию между точками на плоскости (использовать перегруженный оператор)
Необходимо найти дистанцию между точками на площади, используя перегруженный оператор. #include &lt;iostream&gt; using namespace...

Как можно просчитать(получить) количество возможных вариантов с преставлением местами символов в строке без повторений?
Не знаю даже, сюда или не сюда написал. Но нужна помощь в составлении алгоритма(формулы). Есть строка &quot;123456&quot; как можно...

Как можно просчитать траекторию движения обьекта имея направление и "возможную силу толчка"?
все знают АнгриБердс) как просчитать вот ту траекторию полета птицы?

Расстояние между переменными
Доброго времени суток. Понятия не имею, где поинтересоваться по этому поводу, так что спрошу здесь. Я пишу в Visual Studio 2010 (C++). В...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru