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

Задача поиска множественных путей в графе - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Преобразование hwnd в int http://www.cyberforum.ru/cpp-beginners/thread1494031.html
Знаю что тема уже заезжена и полно подобных обсуждений, но не смог применить к своему либо не подошло. Требуется получить из edit и записать в другой модуль числа. Написал код, он работает в...
C++ Int выходит за пределы Добрый день!Проблема в следующем. Работаю с числами аля 13045652312. И нахожу остаток от деления. Но int не в ходит в пределы. Если пишу допустим k=pow(x,c)%a; то пишет,что перегруженная функция.... http://www.cyberforum.ru/cpp-beginners/thread1494025.html
Флаг skipws C++
Как работает флаг cin.unsetf(ios::skipws), какие именно разделители он пропускает? Почему если я хочу считать строку с пробелами, то считает только до пробела?
C++ Вывести на экран таблицу символов в формате «ASCII-код – символ»
Не понимаю, как делать это задание, уже весь интернет перерыл.
C++ Решение матричного уравнения AX=B http://www.cyberforum.ru/cpp-beginners/thread1493992.html
Помогите пожалуйста! Нужна программа для решения матричного уравнения AX=B
C++ Слова, состоящие только из гласных или только из согласных латинских букв Разработать алгоритм и программу. Вводится тест из заглавных и строчных латинских букв, пробелов. Количество символов в тексте не должно превышать 200. Слова разделяются пробелами. Определить и... подробнее

Показать сообщение отдельно
Iakov
0 / 0 / 0
Регистрация: 06.07.2015
Сообщений: 8
09.07.2015, 14:25  [ТС]
Я просто нарисовал очень упрощенную ситуацию. На самом деле, цикл известного размера, а вот сколько раз внутри цикла я буду делать push_back - неизвестно. Зависит от внешних переменных
Ну да, 15 осталось от экспериментирования. на самом деле система дает 64 потока.
Вот здесь один из реальных кусков кода который я хочу распараллелить:

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
#pragma omp parallel   
{
    #pragma omp parallel for shared(TRoutes, OArr, NodeLegA, NodeLegB) 
    for(int ist=0; ist<NofNodes; ist++)
    {
        vector<NodeFan> stNodes;
        int st_nlegs=NodeLegA[ist].size();
        // Выбираем все узлы на конце ребер из узла ist
        int i_i=0;
        for(int i=0; i<st_nlegs; i++)
        {
            NodeFan tmpNodeFan;
            int nn=NodeLegA[ist][i]; //
            if(OArr[nn].msc_finish != ist)
            {
                stNodes.push_back(tmpNodeFan);
                stNodes[i_i].Node=OArr[nn].msc_finish; //Запоминаем, каким узлом кончается ребро
                stNodes[i_i].NLeg=nn; // Здесь же храним адрес ребра в исходном массиве
                i_i++;
            }
        }
 
        for(int ifi=0; ifi<NofNodes; ifi++) // Для каждого конечного узла
        {
            if( ifi != ist)
            {
                vector<NodeFan> fiNodes;
                int fi_nlegs=NodeLegB[ifi].size();
                int i_i=0;
                // Выбираем все узлы в начале ребер из узла ifi
                for(int i=0; i<fi_nlegs; i++)
                {
                    NodeFan tmpNodeFan;
                    int nn=NodeLegB[ifi][i];
                    if(OArr[nn].msc_start != ist && OArr[nn].msc_start != ifi)
                    {
                        fiNodes.push_back(tmpNodeFan);
                        fiNodes[i_i].Node=OArr[nn].msc_start; //Запоминаем, каким узлом начинается ребро
                        fiNodes[i_i].NLeg=nn;
                        i_i++;
                    }
                }
                
                //теперь надо сравнить два массива на совпадения вершин
                int real_route=0;
                for( unsigned int ia=0; ia<stNodes.size(); ia++)
                {
                    for(unsigned int ib=0; ib<fiNodes.size(); ib++)
                    {
                        if(stNodes[ia].Node == fiNodes[ib].Node)
                        {
                            struct Route tmpRoute; //базовая структура, в которой описание маршрута
                            TRoutes[ist][ifi][1].push_back(tmpRoute);
                            TRoutes[ist][ifi][1][real_route].totcost=0.0;
                            TRoutes[ist][ifi][1][real_route].tottime=0.0;
                            //Адрес первого плеча в массиве всех плеч
                            int nn=stNodes[ia].NLeg;
                            TRoutes[ist][ifi][1][real_route].iorigF[0]=nn; 
                            TRoutes[ist][ifi][1][real_route].totcost+=OArr[nn].cost;
                            TRoutes[ist][ifi][1][real_route].tottime+=OArr[nn].time;
 
                            //Адрес второго плеча в массиве всех плеч
                            nn=fiNodes[ib].NLeg;
                            TRoutes[ist][ifi][1][real_route].iorigF[1]=nn; 
                            TRoutes[ist][ifi][1][real_route].totcost+=OArr[nn].cost;
                            TRoutes[ist][ifi][1][real_route].tottime+=OArr[nn].time;
 
                            TRoutes[ist][ifi][1][real_route].msc_start=ist;
                            TRoutes[ist][ifi][1][real_route].msc_finish=ifi;
                            TRoutes[ist][ifi][1][real_route].nlg=2;
                            real_route++;
                        }
                    }
                }
                
            } //if( ifi != ist)
        } //for(int ifi=0; ifi<NofNodes; ifi++)
    } //for(int ist=0; ist<NofNodes; ist++)
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru