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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Тамика
Котовчанин
911 / 454 / 144
Регистрация: 16.02.2010
Сообщений: 3,117
Записей в блоге: 27
#1

Построить рандомный граф - C++

17.01.2014, 12:35. Просмотров 355. Ответов 0
Метки нет (Все метки)

Нужна помощь! Начала изучение graphviz-a и столкнулась с проблемой. Задание - нужно создать класс ноды и от нее унаследовать много разных классов нод, которые будут отличаться формой, цветом... Потом из них генерировать случайные деревья. То есть - ввожу количество нод желаемое, а программа делает дерево. Так вот. Сделала классы и сделала функцию, которая генерирует деревья с разными формами... Но без использования моих классов. Проблема теперь это все связать... Чтобы программа использовала мои классы... Но не могу придумать, как это синтезировать...
Вот код. (Если что-то понятно, конечно ) Заранее спасибо!

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
#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <cstdlib>
#include <ctime>
 
class node
{
private:
    std::string name;
public:
    node(const std::string& aName): name(aName){}
    std::vector<node*>children;
    std::string getName()
    {
        return this->name;
    }
    std::string setName(const std::string& name)
    {
        this->name = name;
    }
};
 
class triangleShape : public node
{
public:
    int getId()
    {
        return 0;
    }
    std::string getShape()
    {
        return "triangle";
    }
};
 
class RectShape : public node
{
public:
    int getId()
    {
        return 1;
    }
    std::string getShape()
    {
        return "rect";
    }
};
 
class EllipseShape : public node
{
public:
    int getId()
    {
        return 2;
    }
    std::string getShape()
    {
        return "ellipse";
    }
};
 
class CircleShape : public node
{
public:
    int getId()
    {
        return 3;
    }
    std::string getShape()
    {
        return "circle";
    }
};
 
class HexagonShape : public node
{
public:
    int getId()
    {
        return 4;
    }
    std::string getShape()
    {
        return "hexagon";
    }
};
 
std::string generateNodeType()
{
    int r = rand()%4;
    std::string nodeType;
    switch(r)
    {
        case 0:
            return nodeType = "[shape = triangle]";
            break;
        case 1:
            return nodeType = "[shape = rect]";
            break;
        case 2:
            return nodeType = "[shape = ellipse]";
            break;
        case 3:
            return nodeType = "[shape = circle]";
            break;
        case 4:
            return nodeType = "[shape = hexagon]";
            break;
        default:
            return nodeType = "";
            break;
    }
}
 
std::string generateNode(node* node, int childCount)
{
    std::string str = "digraph A {";
    srand(std::time(NULL));
    std::vector<std::vector<int> > matrix;
    matrix.resize(childCount);
    for (int i = 0; i < childCount; ++i) {
        matrix[i].resize(childCount);
        for (int j = 0; j < childCount; ++j) {
            matrix[i][j] = 0;
        }
    }
    for (int i = childCount - 1; i > 0; --i) 
    {
        matrix[rand() % i][i] = 1;
    }
    for (long double i = 0; i < childCount; ++i)
    str += std::to_string(i) + generateNodeType();
 
    for (long double i = 0; i < childCount; ++i) {
        for (long double j = 0; j < childCount; ++j) {
            if (matrix[i][j] == 1) {
                str += std::to_string(i) + " -> " + std::to_string(j) + " ; ";
            }
        }
    }
 
    str = str + "}";
    return str;
}
 
void main()
{
    node* root = new node("A");
    std::string str = generateNode(root, 10);
    std::cout << str << std::endl;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2014, 12:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построить рандомный граф (C++):

Построить граф - C++
можете привести простейший пример проги которая выдаёт граф просто чертёж?

Построить связный граф с вершинами во всех точках так, чтобы суммарная длина его ребра была наименьшей - C++
Здравствуйте, пожалуйста помогите... На плоскости своими координатами задано n точек.Построить связный граф с вершинами во всех...

Считать граф из файла (граф задан матрицей) представить его в виде списка и записать список заново в файл - C++
помогите очень срочно надо. считать граф из файла (граф задан матрицей) представить его в виде списка и записать список заново в файл ...

Рандомный вывод картинки - C++
Приветствую , товарищи ! Искал , не нашел того , что хотел . В общем , у меня есть 36 разных картинок . Надо , что бы при нажатии...

Рандомный генератор чисел - C++
Привет, ребята, у меня назрел вопрос. Я только-только начал изучать C++, и мне дали задание, написать генератор чисел. Я ввожу два числа,...

Рандомный выбор слова - C++
Имеется файл(тхт), в котором записаны слова(каждое слово с новой строчки). Мне нужно рандомно выбирать какое-то из слов. Пока есть идея...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 12:35
Привет! Вот еще темы с ответами:

Рандомный вывод чисел - C++
как сделать случайный вывод числа при каждой компиляции. 1 - можно допустить повторение числа но не при каждой компиляции. 2- не допускать...

рандомный массив с диапазоном, и не только - C++
нужно сделать рандомный массив с диапазоном, -500 500, и так что бы размер массива нужно задавать пользователю, а не кодеру... как...

Рандомный массив из дробных элементов - C++
Здраствуйте. напешите пожалуйста код для вывода рандомных доробных (вещественных) элементов. Знаю вот a=rand()%10; А как дробные не знаю.

Рандомный ввод вещественных чисел в массив - C++
Здравствуйте. Проблема состоит в том, что надо заполнить массив случайными вещественными значениями с конкретным диапазоном Причем диапазон...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru