Помощь с меткой

271
12 мая 2022, 07:50

Поставленная задача:

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

Код программы:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
vector <vector< int >> massiv;
vector <vector< int >> array;
int m;
int size;
int count = 1;
int h = 1;
int check;
int p;
bool pc = false;
bool ps = false;
bool pse = false;
go:

while (!ps)
{
    cout << "Введите количество вершин графа:" << endl;
    cin >> size;
    if (cin.good() && size > 0)
    {
        cout << "Размер матрицы ведён правильно, программа продолжит работу" << endl;
        massiv.assign(size, vector<int>(size));
        ps = true;
    }
    else
    {
        cout << "Размер матрицы ведён не правильно, введите целое неотрицательное число" << endl;
        cin.clear();
        cin.ignore();
    }
}
while (!pse)
{
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            pc = false;
            while (!pc)
            {
                cin >> massiv[i][j];
                if (cin.good())
                {
                    if (massiv[i][j] == 1 || massiv[i][j] == 0)
                    {
                        if (i == j && massiv[i][j] != 0)
                        {
                            cout << "В главной диагонали могут быть только 0" << endl;
                            cin.clear();
                            cin.ignore();
                        }
                        else
                        {
                            pc = true;
                        }
                    }
                    else
                    {
                        cout << "Введённое число не 0 и не 1" << endl;
                        cin.clear();
                        cin.ignore();
                    }
                }
                else
                {
                    cout << "Был введён символ, введите число 0 или 1" << endl;
                    cin.clear();
                    cin.ignore();
                }
            }
        }
    }
    p = 0;
    cout << "Проверка на симметричность:" << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            if (massiv[i][j] != massiv[j][i])
            {
                p++;
            }
        }
    }
    if (p > 0)
    {
        cout << "Матрица не симметрична, введите матрицу заново" << endl;
    }
    else
    {
        cout << "Матрица симметрична" << endl;
        pse = true;
    }
}
cout << "Ваша матрица выглядит так:" << endl;
for (int i = 0; i < size; i++)
{
    for (int j = 0; j < size; j++)
    {
        cout << massiv[i][j] << " ";
    }
    cout << endl;
}
do
{
    cout << endl;
    cout << "1. Список смежности \n";
    cout << "2. Список инцидентности\n";
    cout << "3. Таблица инцидентности\n";
    cout << "4. Задать новый массив \n";
    cout << "5. Выход из программы.";
    cout << endl;
    cin >> m;
    cout << endl;
    // Меню программы
    switch (m)
    {
        // Список смежности
    case 1:
    {
        cout << "Список смежности получился: " << endl;
        for (int i = 0; i < size; i++) {
            cout << i + 1 << ": ";
            for (int j = 0; j < size; j++) {
                if (i == j) {
                    continue;
                }
                if (massiv[i][j] == 1) {
                    cout << j + 1 << " ";
                }
            }
            cout << endl;
        }
        cout << endl;
        break;
    }
    //
    case 2:
    {
        count = 1;
        h = 1;
        cout << "Список инцидентности получился такой:" << endl;
        for (int i = 1; i < size; i++) {
            for (int j = 0; j < count; j++) {
                if (massiv[i][j] == 1) {
                    cout << h << ": ";
                    cout << i + 1 << " " << j + 1 << endl;
                    h++;
                }
            }
            count++;
        }
        break;
    }
    //
    // Сортировка по возрастанию
    case 3:
    {
        {
            check = 0;
            array.assign(size, vector<int>(size));
            cout << "Таблица инцидентности получилась такой: " << endl;
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < i; j++)
                {
                    if (massiv[i][j] == 1)
                    {
                        array[check][i] = 1;
                        array[check][j] = 1;
                        check++;
                    }
                }
            }
            for (int i = 0; i < check; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    cout << array[i][j] << " ";
                }
                cout << endl;
            }
            break;
        }
    }
        //
        // Задание нового массива
    case 4:
    {
        cout << endl;
        goto go;
    }
    break;
}
    //
    } 
    while (m != 5);
    }

По идее, когда вводишь цифру 4, программа должна возвращаться наверх в метку go, но почему-то этого не происходит, он пропускает программу вплоть до do, помогите пожалуйста починить)

READ ALSO
Что такое ошибки времени исполнения?

Что такое ошибки времени исполнения?

Расскажите пожалуйста, что такое ошибки времени исполнения? Когда они возникают? Если можно, то хотелось бы посмотреть на примерах кода на C/C++И...

207
Где ошибка в простом алгоритме?

Где ошибка в простом алгоритме?

Написал простой алгоритм для решения данной задачки:

451
Ошибка PHP 500 , internal server error 500

Ошибка PHP 500 , internal server error 500

Ошибка PHP 500 , internal server error 500 Пре переходе на selectphp вылетает ошибка

186
Назначить администратором беседы ВК через API

Назначить администратором беседы ВК через API

Как назначать и разжаловать администраторов в беседах ВК через API? В Kate Mobile это реализовано только непонятно как, метода найти не могу

213