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

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

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

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

#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, помогите пожалуйста починить)


Ответы (0 шт):