Поставленная задача:
Написать программу, на вход которой поступает таблица смежности графа. Программа должна выводить список смежности, список инцидентности или таблицу инцидентности по выбору пользователя. Выбор осуществляется посредством консольного меню.
Код программы:
#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, помогите пожалуйста починить)
Расскажите пожалуйста, что такое ошибки времени исполнения? Когда они возникают? Если можно, то хотелось бы посмотреть на примерах кода на C/C++И...
Ошибка PHP 500 , internal server error 500 Пре переходе на selectphp вылетает ошибка
Как назначать и разжаловать администраторов в беседах ВК через API? В Kate Mobile это реализовано только непонятно как, метода найти не могу