Skip to content
This repository has been archived by the owner on Dec 28, 2023. It is now read-only.

[task_03] Add problem solution #397

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
| 20 | [Романюк Алексей](https://github.com/Gomziakoff) |[ii02320](trunk/ii02320) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | 9|
| 21 | [Скварнюк Давид](https://github.com/Bidway) |[ii02321](trunk/ii02321) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | 9|
| 22 | [Тутина Елизавета](https://github.com/Eliza0756) |[ii02322](trunk/ii02322) | ✅ | ✅ | ✅ | ✅ | | | | | 7|
| 23 | Швороб Владислав | | ✅ | ✅ | ✅ | | | | | | 6|
| 23 | Швороб Владислав | | ✅ | ✅ | ✅ | | | | | | 7|

## Группа ИИ-24
| № | ФИО | Directory name | #0 | #1 | #2 | #3 | #4 | #5 | #6 | #7 | Рейтинг |
Expand Down
Binary file added trunk/II02323/task_03/doc/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added trunk/II02323/task_03/doc/1page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added trunk/II02323/task_03/doc/2page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added trunk/II02323/task_03/doc/3page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added trunk/II02323/task_03/doc/4page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added trunk/II02323/task_03/doc/5page.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
95 changes: 95 additions & 0 deletions trunk/II02323/task_03/doc/otchet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<p align="center"> Министерство образования Республики Беларусь</p>
<p align="center">Учреждение образования</p>
<p align="center">“Брестский Государственный технический университет”</p>
<p align="center">Кафедра ИИТ</p>
<br><br><br><br><br><br><br>
<p align="center">Лабораторная работа №3</p>
<p align="center">По дисциплине “Общая теория интеллектуальных систем”</p>
<p align="center">Тема: “Разработка редакторов графов”</p>
<br><br><br><br><br>
<p align="right">Выполнил:</p>
<p align="right">Студент 2 курса</p>
<p align="right">Группы ИИ-23</p>
<p align="right">Швороб В.А.</p>
<p align="right">Проверил:</p>
<p align="right">Иванюк Д. С.</p>
<br><br><br><br><br>
<p align="center">Брест 2023</p>

---
# Задание

1. Разработать и реализовать программный продукт, позволяющий
редактировать графовые конструкции различных видов и производить над
ними различные действия. Язык программирования - **C++**.

2. Редактор должен позволять (задания со **[\*]** являются необязательными):
a) одновременно работать с несколькими графами (MDI);
b) **[\*]** выделение одновременно нескольких элементов графа, копирование
выделенного фрагмента в clipboard и восстановление из него;
c) задавать имена графам;
d) сохранять и восстанавливать граф во внутреннем формате программы;
e) экспортировать и импортировать граф в текстовый формат (описание
см. ниже);
f) создавать, удалять, именовать, переименовывать, перемещать узлы;
g) создавать ориентированные и неориентированные дуги, удалять дуги;
h) добавлять, удалять и редактировать содержимое узла (содержимое в
виде текста и ссылки на файл);
i) задавать цвет дуги и узла, образ узла;
j) **[\*]** создавать и отображать петли;
k) **[\*]** создавать и отображать кратные дуги.

3. Программный продукт должен позволять выполнять следующие операции:
a) выводить информацию о графе:

+ количество вершин, дуг;
+ степени для всех вершин и для выбранной вершины;
+ матрицу инцидентности;
+ матрицу смежности;
+ является ли он деревом, полным, связанным, эйлеровым, **[\*]** планарным;

b) поиск всех путей (маршрутов) между двумя узлами и кратчайших;
c) вычисление расстояния между двумя узлами;
d) вычисление диаметра, радиуса, центра графа;
e) **[\*]** вычисление векторного и декартово произведения двух графов;
f) **[\*]** раскраска графа;
g) нахождения эйлеровых, [*] гамильтоновых циклов;
h) **[\*]** поиск подграфа в графе, со всеми или некоторыми неизвестными
узлами;
i) **[\*]** поиск узла по содержимому;
j) **[\*]** объединение, пересечение, сочетание и дополнение графов;
k) **[\*]** приведение произвольного графа к определенному типу с
минимальными изменениями:

+ бинарное и обычное дерево;
+ полный граф;
+ планарный граф;
+ связанный граф;

4. Формат текстового представления графа:
<ГРАФ> ::= <ИМЯ ГРАФА> : UNORIENT | ORIENT ; <ОПИСАНИЕ УЗЛОВ> ;
<ОПИСАНИЕ СВЯЗЕЙ> .
<ИМЯ ГРАФА> ::= <ИДЕНТИФИКАТОР>
<ОПИСАНИЕ УЗЛОВ> ::= <ИМЯ УЗЛА> [ , <ИМЯ УЗЛА> …]
<ИМЯ УЗЛА> ::= <ИДЕНТИФИКАТОР>
<ОПИСАНИЕ СВЯЗЕЙ> ::= <ИМЯ УЗЛА> -> <ИМЯ УЗЛА> [ , <ИМЯ УЗЛА> …] ;
[<ОПИСАНИЕ СВЯЗЕЙ> …]

# Приложение для работы с графами:

![1page](1page.png)

# Добавление вершин:

![2page](2page.png)

# Добавление вершин:

![3page](3page.png)
# Информация о графе:

![1](1.png)

# Импорт и экспорт графа:

![5page](5page.png)
28 changes: 28 additions & 0 deletions trunk/II02323/task_03/src/AppInterface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from tkinter import Button

def create_buttons(root, menu_add_vertex, menu_add_edge_window, eulerian_cycle_search_function, shortest_path):
# List of Buttons
add_vertex_button = Button(root, text="Добавить вершину", anchor="w", command=menu_add_vertex, font=('Arial', 9), width=15, bg='lightblue', fg='black')
add_edges_button = Button(root, text="Добавить ребро", anchor="w", command=menu_add_edge_window, font=('Arial', 9), width=15, bg='lightblue', fg='black')
euler_cycle_find_button = Button(root, text="Эйлеров цикл", anchor="w", command=eulerian_cycle_search_function, font=('Arial', 9), width=15, bg='lightblue', fg='black')
shortest_way_find_button = Button(root, text="Кратчайший путь", anchor="w", command=shortest_path, font=('Arial', 9), width=15, bg='lightblue', fg='black')

info = Button(root, text="Информация о графе", anchor="w", command=lambda: None, font=('Arial', 9), width=15, bg='lightblue', fg='black')
impirt = Button(root, text="Импорт", anchor="w", command=lambda: None, font=('Arial', 9), width=15, bg='lightblue', fg='black')
export = Button(root, text="Экспорт", anchor="w", command=lambda: None, font=('Arial', 9), width=15, bg='lightblue', fg='black')

add_vertex_button.grid(row=1, column=0, sticky="ew", padx=10, pady=5)
add_edges_button.grid(row=2, column=0, sticky="ew", padx=10, pady=5)
euler_cycle_find_button.grid(row=3, column=0, sticky="ew", padx=10, pady=5)
shortest_way_find_button.grid(row=4, column=0, sticky="ew", pady=5, padx=10)
info.grid(row=5, column=0, sticky="ew", pady=30, padx=10)
impirt.grid(row=6, column=0, sticky="ew", pady=5, padx=10)
export.grid(row=7, column=0, sticky="ew", pady=5, padx=10)

# Canvas Binds

def bind_canvas(root, canvas, node_movement_function, change_name_weight_function, color_change_function, delete):
canvas.bind('<B1-Motion>', node_movement_function)
canvas.bind('<Button-2>', change_name_weight_function)
canvas.bind('<Button-3>', color_change_function)
root.bind('<B3-Motion>', delete)
14 changes: 14 additions & 0 deletions trunk/II02323/task_03/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
cmake_minimum_required (VERSION 3.8)

if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

project ("laba3")

add_executable (laba3 "main.cpp" )

if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET laba3 PROPERTY CXX_STANDARD 20)
endif()
Binary file not shown.
7 changes: 7 additions & 0 deletions trunk/II02323/task_03/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include <cstdlib>
using namespace std;

int main() {
system("python main.py");
return 0;
}
Loading