-
Разработать и реализовать программный продукт, позволяющий редактировать графовые конструкции различных видов и производить над ними различные действия. Язык программирования - C++.
-
Редактор должен позволять (задания со [*] являются необязательными): a) одновременно работать с несколькими графами (MDI); b) [*] выделение одновременно нескольких элементов графа, копирование выделенного фрагмента в clipboard и восстановление из него; c) задавать имена графам; d) сохранять и восстанавливать граф во внутреннем формате программы; e) экспортировать и импортировать граф в текстовый формат (описание см. ниже); f) создавать, удалять, именовать, переименовывать, перемещать узлы; g) создавать ориентированные и неориентированные дуги, удалять дуги; h) добавлять, удалять и редактировать содержимое узла (содержимое в виде текста и ссылки на файл); i) задавать цвет дуги и узла, образ узла; j) [*] создавать и отображать петли; k) [*] создавать и отображать кратные дуги.
-
Программный продукт должен позволять выполнять следующие операции: a) выводить информацию о графе:
- количество вершин, дуг;
- степени для всех вершин и для выбранной вершины;
- матрицу инцидентности;
- матрицу смежности;
- является ли он деревом, полным, связанным, эйлеровым, [*] планарным;
b) поиск всех путей (маршрутов) между двумя узлами и кратчайших; c) вычисление расстояния между двумя узлами; d) вычисление диаметра, радиуса, центра графа; e) [*] вычисление векторного и декартово произведения двух графов; f) [*] раскраска графа; g) нахождения эйлеровых, [*] гамильтоновых циклов; h) [*] поиск подграфа в графе, со всеми или некоторыми неизвестными узлами; i) [*] поиск узла по содержимому; j) [*] объединение, пересечение, сочетание и дополнение графов; k) [*] приведение произвольного графа к определенному типу с минимальными изменениями:
- бинарное и обычное дерево;
- полный граф;
- планарный граф;
- связанный граф;
-
Формат текстового представления графа: <ГРАФ> ::= <ИМЯ ГРАФА> : UNORIENT | ORIENT ; <ОПИСАНИЕ УЗЛОВ> ; <ОПИСАНИЕ СВЯЗЕЙ> . <ИМЯ ГРАФА> ::= <ИДЕНТИФИКАТОР> <ОПИСАНИЕ УЗЛОВ> ::= <ИМЯ УЗЛА> [ , <ИМЯ УЗЛА> …] <ИМЯ УЗЛА> ::= <ИДЕНТИФИКАТОР> <ОПИСАНИЕ СВЯЗЕЙ> ::= <ИМЯ УЗЛА> -> <ИМЯ УЗЛА> [ , <ИМЯ УЗЛА> …] ; [<ОПИСАНИЕ СВЯЗЕЙ> …]
-
Написать отчет по выполненной лабораторной работе в .md формате (readme.md). Разместить его в следующем каталоге: trunk\ii0xxyy\task_03\doc (где xx - номер группы, yy - номер студента, например ii02102).
-
Исходный код разработанной программы разместить в каталоге: trunk\ii0xxyy\task_03\src.
-
Отразить выполнение работы в файле readme.md в соответствующей строке (например, для студента под порядковым номером 1 - https://github.com/brstu/OTIS-2023/edit/main/readme.md?#L17-L17).