С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.03.2020
Сообщений: 13
1

Граф

02.04.2020, 19:12. Показов 620. Ответов 0

Author24 — интернет-сервис помощи студентам
Задание:
Нужно сделать програму, которая читает с клавиатуры количество вершин и ребер графа. Потом она читает связи между вершинами и выводит из них матрицу смежности. А потом отвечает на вопрос: является граф деревом или лесом?
Вот, что у меня есть:
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
int i, j, n, c, Edges;
int a[80][80], used[80];
 
void dfs(int v)
{
    used[v] = 1;
    c++;
    for (int i = 1; i <= n; i++)
        if (a[v][i] && !used[i]) 
            dfs(i);
}
 
int main(void)
{
    setlocale(LC_ALL, "rus");
    int m, x, y;
    cout << "Введите количество вершин: ";
    cin >> n;
    while (1 >= n) {
        cout << "Enter again " << endl;
        cin >> n;
    }
    cout << "Введите количество рёбер: ";
    cin >> m;
    while (256 <= m) {
        cout << "Enter again " << endl;
        cin >> m;
    }
    cout << endl;
    cout << "Введите рёбра: " << endl;
    for (int i = 1; i <= m; i++)
    {
        cin >> x >> y;
        while (x > n || y > n) {
            cout << "Введите пару заново " << endl;
            cin >> x >> y;
        }
        a[x][y] = 1;
        a[y][x] = 1;
    }
    cout << endl;
    cout << "Матрица смежности: " << endl;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    Edges = c = 0;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
        {
            if (a[i][j] != 0) {
                Edges += a[i][j];
            }
        }
    dfs(1);
    Edges /= 2;
    if ((Edges == n - 1) && (c == n)){
         cout << "YES" << endl;
    }
    else {
         cout << "NO" << endl;
    }
}
Не могу понять в чем почему при вводе:
Вершины: 3
Ребра: 2
Матрица:
0 1 0
1 0 1
0 1 0
Выводит Да
А при:
Вершины: 4
Ребра: 5
Матрица:
0 1 1 0
1 0 1 1
1 1 0 1
0 1 1 0
Выводит Нет
Это ведь тоже дерево.
Помогите исправить ошибки
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2020, 19:12
Ответы с готовыми решениями:

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

Граф в С
Не могли бы помочь.. как можно построить граф в С ? или где модно прочесть про то как создать файл...

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

Граф
Дан граф в виде матрицы смежности 7х7(вводится вручную либо загружается из файла) нужно...

0
02.04.2020, 19:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2020, 19:12
Помогаю со студенческими работами здесь

Граф
Помогите описать граф в С++ списками. По какому принципу это делается ?

Граф
2. Имеется N населенных пунктов (N≤15), и сеть авиалиний, соединяющих эти города. Сеть задана...

Граф
В городе N площадей. Любые две площади соединены между собой ровно одной дорогой с двусторонним...

Двудольный граф??
Проверка является ли граф двудольным))


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

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