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

Правильно ли указано хранение графа в массиве списков? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как заполнить структуру в цикле http://www.cyberforum.ru/cpp-beginners/thread1186106.html
Добрый день, как можно заполнить структуру с помощью цикла while или do while То есть в структуре есть 4 члена: 1. Имя работника 2. Фамилия работника 3. Должность работника. 4. Заработная...
C++ Области видимости функций Добрый день. Написал класс, помогите найти ошибки #include <iostream> #include <string> #include <vector> using namespace std; struct FIO { http://www.cyberforum.ru/cpp-beginners/thread1186100.html
C++ Курсовая. Методы оптимизации
http://www.cyberforum.ru/attachments/402404d1400795723 Помогите чем сможете Заранее спасибо
C++ Напечатать минимальное число, больше 500, которое нацело делится на 47
Сделалано в DEV C++,нужно переделать в NetBeans IDE 2)задание: Напечатать минимальное число, больше 500, которое нацело делится на 47. #include <iostream> using namespace std; int main() { ...
C++ Определить, на какую цифру, чётную или нечётную, оканчивается число http://www.cyberforum.ru/cpp-beginners/thread1186085.html
Сделалано в DEV C++,нужно переделать в NetBeans IDE 1)задание: Дано натуральное число. Определить на какую цифру чётную или нечётную оканчивается число. #include <iostream> using namespace std;...
C++ Потеря нулевых байт при архивации (алгоритм Хаффмана) Неправильно архивирует pdf файлы Как мне сказали вся ошибка в функции BuildTable "Вместо условия проверки отсутствия символа, лучше сделать проверку ссылок обоих дочерних элементов на равенство... подробнее

Показать сообщение отдельно
icpu
354 / 268 / 58
Регистрация: 10.03.2011
Сообщений: 1,281
Записей в блоге: 2
24.05.2014, 22:18
Qazan, он работает корректно, но усложняется поиск смежных вершин. Для одних мы просматриваем индексы map, для других ищем во всех индексах по set'ам. Можно рёбра хранить просто в виде структуры в одном set'е, а для поиска определить функцию, по которой отбирать из сета вершины.
C++
1
2
3
4
5
6
7
8
9
class mpair {
int a; int b; 
bool coll(int i) {return i==a||i==b;}
};
std::set <mpair> para;
 
for (auto i = para.begin(); i != para.end(); i++)
    if (i->coll(something))
        actions();
Не стоит заморачиваться, если не стоит задача снизить потребление памяти на 15%.

С другой стороны, если интересует чисто упрощение записи файла, можно при считывании запоминать симметричные позиции,
а для отсечения уже существующих и подсчёта общего их числа можно поставить предусловие
C++
1
2
3
4
5
6
7
if ( s.find(a) != s.end() )
{
n++;
s[min(a,b)].insert(max(a,b));
if (a != b)
s[max(a,b)].insert(min(a,b));
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru