Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 5
1

Найти все полные четырех вершинные Подграфы заданного графа

30.04.2014, 18:50. Показов 1758. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток ! Я первокурсник , первый раз пишу курсовую работу и так получилось что нет возможности попросить помощи у преподавателя так что решил обратиться с некоторыми вопросами сюда.
Задача : Дан Граф , Найти все полные четырех вершинные Подграфы.

Горе пополам оформил ввод , пытался оптимизировать но чет не получилось, костыль на костыле и решил пока оставить так и идти дальше, то есть к самому обходу и тут встал порос как будет лучше.
Дело в том что по определению полного графа степень вершины равна n -1. Т.к у меня 4 вершины понятно что степень равна 3. Сначала подумал с начало пройтись по графу и проверить на кол-во смежных вершин. тем самым если в какой либо меньше 3 то заходить в нее и смотреть смежные ей и в них удалять эту вершину. Потом думал сделать просто обход всего графа прыгая от смежной вершины к смежной пока не насчитаю 4 и закидывать их в масив потом проверять в каждой смежна ли она с тремя предыдущими. Проблема вся в том что мыслей много но боюсь сделать плохо так как зная препода , он мужик хороший , просто всегда говорит что штаны через голову возможно одеть но зачем и просит оптимизации! Заранее Благодарен тем кто откликнется
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <stdio.h>
 
struct adjacency
{
    int vertex;
    adjacency *next;
};
 
struct list_graph
{
    adjacency *vertex_top;
    list_graph *next;
};
 
int is_empty(list_graph *graph)
{
    if (graph == NULL) return 1;
    return 0;
}
 
void max_min(int &elem_max, int &elem_min) 
{
    if (elem_max < elem_min)
    {
        int i;
        i = elem_max;
        elem_max = elem_min;
        elem_min = i;
    }
}
 
void create_graph(list_graph *graph)
{
    graph = new list_graph;
    graph->vertex_top = new adjacency;
}
 
list_graph *print_graph(list_graph *graph, FILE *input)
{
    list_graph *current_vertex;
    adjacency *current_adjacency;
    int elem_max = 0;
    int elem_min = 0;
    graph = new list_graph;
    graph->next = NULL;
    graph->vertex_top = new adjacency;
    graph->vertex_top->vertex = NULL;
    current_vertex = graph;
    while (fscanf_s(input, "%d%d", &elem_max, &elem_min) != EOF)
    {
        max_min(elem_max, elem_min);
        for (int i = 1; i <= elem_min; i++)
        {
            if (i == elem_min)
            {
                int k = 0;
                current_adjacency = current_vertex->vertex_top;
                while (k != 1)
                {
                    if (current_adjacency->vertex == NULL)
                    {
                        current_adjacency->vertex = elem_max;
                        current_adjacency->next = NULL;
                        current_vertex = graph;
                        k++;
                    }
 
                    else
                    {
                        if (current_adjacency->next == NULL)
                        {
                            current_adjacency->next = new adjacency;
                            current_adjacency->next->vertex = elem_max;
                            current_adjacency->next->next = NULL;
                            current_vertex = graph;
                            k++;
                        }
 
                        else
                        {
                            current_adjacency = current_adjacency->next;
                        }
                    }
                }
            }
 
            else
            {
                if (current_vertex->next == NULL)
                {
                    current_vertex->next = new list_graph;
                    current_vertex->next->vertex_top = new adjacency;
                    current_vertex->next->vertex_top->vertex = NULL;
                    current_vertex = current_vertex->next;
                    current_vertex->next = NULL;
                }
                else
                {
                    current_vertex = current_vertex->next;
                }
            }
        }
 
        for (int j = 1; j <= elem_max; j++)
        {
            if (j == elem_max)
            {
                int k = 0;
                current_adjacency = current_vertex->vertex_top;
                while (k != 1)
                {
                    if (current_adjacency->vertex == NULL)
                    {
                        current_adjacency->vertex = elem_min;
                        current_adjacency->next = NULL;
                        current_vertex = graph;
                        k++;
                    }
 
                    else
                    {
                        if (current_adjacency->next == NULL)
                        {
                            current_adjacency->next = new adjacency;
                            current_adjacency->next->vertex = elem_min;
                            current_adjacency->next->next = NULL;
                            current_vertex = graph;
                            k++;
                        }
 
                        else
                        {
                            current_adjacency = current_adjacency->next;
                        }
                    }
                }
            }
 
            else
            {
                if (current_vertex->next == NULL)
                {
                    current_vertex->next = new list_graph;
                    current_vertex->next->vertex_top = new adjacency;
                    current_vertex->next->vertex_top->vertex = NULL;
                    current_vertex = current_vertex->next;
                    current_vertex->next = NULL;
                }
                else
                {
                    current_vertex = current_vertex->next;
                }
            }
        }
 
    }
    return graph;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2014, 18:50
Ответы с готовыми решениями:

В графе найти все его четырехвершинные полные подграфы
Кто-нибудь знаком с прологом? Помогите разобраться, пожалуйста. Вот например есть граф: % ...

Разбиение графа на подграфы
Необходимо реализовать несколько алгоритмов разбиения графа на подграфы (любых). Перелопатил много...

Что такое максимально полные и максимально пустые подграфы?
Что такое максимально полные и максимально пустые подграфы?

Найти все вершины заданного графа, недостижимые от заданной его вершины
Прошу помощи в написании программы с использованием обхода в глубину. Условие задачи: Найти все...

1
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 5
06.05.2014, 10:49  [ТС] 2
Убрал подпрограмму удаления смежных вершин , так как сказали что нельзя изменять граф!
0
06.05.2014, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2014, 10:49
Помогаю со студенческими работами здесь

Найти все вершины заданного графа, недостижимые от заданной его вершины
Помогите написать программу. Условие: Найти все вершины заданного графа, недостижимые от заданной...

Графы. Найти все вершины заданного графа, недостижимые от заданной его вершины
Найти все вершины заданного графа, недостижимые от заданной его вершины. Помогите решить...

Найти все частные производные и полные дифференциалы 1-го и 2-го порядков
Найти все частные производные и полные дифференциалы 1-го и 2-го порядков от заданных ниже функций....

Найти все вершины графа, к которым существует путь заданной длины от выделенной вершины графа
Написать программу на prologuse на русском языке как на примере(Определить, является ли связным...


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

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