Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 01.12.2013
Сообщений: 4
1

Двудольность графа

10.12.2013, 23:34. Показов 8536. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется проверить граф на двудольность методом поиска в глубину либо в ширину на С++
Опишите, пожалуйста, алгоритм по шагам
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2013, 23:34
Ответы с готовыми решениями:

Создание графа по матрице и поиск кратчайшего пути из одного графа в другой
Доброго времени суток. Задали задание по матрице составить граф и написать функции 1 функция...

Двудольные графы. Проверка графа на двудольность
Граф называется двудольным, если его вершины можно раскрасить в два цвета так, что нет ребер,...

Проверка графа, заданного матрицей смежности, на двудольность
Здравствуйте!!! Подскажите пожалуйста алгоритм, с помощью которого можно проверить граф, заданный...

Для графа определить его двудольность и вывести обе доли (исправить программу)
помогите исправить программу! запускается, на файл вывода пуст... а когда раскоментирываю - не...

2
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
11.12.2013, 17:05 2
Лучший ответ Сообщение было отмечено как решение

Решение

Нужно проверить граф на двудольность поиском в глубину


Произведём серию поисков в ширину. Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.

По окончании работы алгоритма мы либо обнаружим, что граф не двудолен, либо найдём разбиение вершин графа на две доли.
Проверка графа на двудольность и разбиение на две доли

Алгоритм поиска в ширину на графе
Поиск в ширину. Двудольный граф
Поиск в ширину
1
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231
19.01.2015, 12:43 3
Я использовал алгоритм поиска в глубину, чтобы проверить - является ли граф двудольным. Но не работает. Подскажите пожалуйста что не так.

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
#include <iostream>
#include <vector>
 
using namespace std;
 
void DFS(int vertex);
void print();
 
const int count_vertex = 4;
bool bipartite_graph = true;
vector<vector<int>> graph =
{ 
    {0,0,0,0},
    {0,1,1,0},
    {1,0,0,1},
    {1,0,0,1},
    {0,1,1,0}
};
vector<int> color(count_vertex + 1, 0);
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    cout << "Матрица смежности" << endl;
    print();
    
    for (size_t i = 1; i <= count_vertex; i++)
    {
        if (color[i] == 0)
        {
            color[i] = 1;
            DFS(i);
        }
 
    }
    cout << bipartite_graph << endl;
 
    system("PAUSE");
    return 0;
}
 
void print()
{
    cout << "Матрица смежности" << endl;
    for (auto i = graph.begin(); i != graph.end(); ++i)
    {
        for (auto j = (*i).begin(); j != (*i).end(); ++j)
            cout << *j << " ";
        cout << endl;
    }
 
}
 
void DFS(int vertex)
{
    for (int u = 0; u < graph[vertex].size(); ++u)
    {
        if ((color[u] == 0) && (graph[vertex][u] == 1))
        {
            color[u] = 3 - color[vertex];
            DFS(u);
        }
        else if (color[u] == color[vertex])
            bipartite_graph = false;
    }
}
0
19.01.2015, 12:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2015, 12:43
Помогаю со студенческими работами здесь

Нахождение фактора графа и остова графа для некоторого произвольного графа (5-6 вершин)
Форумчане прошу помощь в выполнение задания по деск. мат. Задание: Нахождение фактора графа и...

Проверка на двудольность
Граф является двудольным,если у него нет циклов нечетной длины,проще говоря если мы раскрасим...

По заданной матрице смежности простого графа построить каркас этого графа с использованием поиска в ширину
Задание: заданно матрицу смежности простого графа. Построить каркас этого графа с использованием...

Выполнить обход в ширину неориентрованного графа, начиная с заданной вершины. Способ представления графа – матрица инциденций
Буду очень благодарен, если поможете Выполнить обход в ширину неориентированного графа, начиная с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru