Otchet_6_2_semestr_DM (1)
.docЗвіт
Лабораторна робота №6 Ілмурадов Максим ІНФ-12-1
Задание:
1. С клавиатуры вводится квадратная матрица произвольной размерности (альтернативный вариант генерируется).
Размерность: количество вершин графа. Эта матрица является матрицей весов графа (т.е. все элементы д/б не отрицательны).
2. Вводятся 2 начальных вершины.
3. Итерационным процессом строятся 2 дерева при помощи метода ближайшего соседа.
4. Если на одной итерации вершина является ближайшей к 2-м деревьям, она объявляется спорной и не относится ни к одному из них.
5. Вывести получившиеся графы, спорные вершины и изолированные вершины.
#include <iostream>
#include <conio.h>
using namespace std;
struct bin_tree
{
int value;
bin_tree *left, *right;
}*pHead = NULL; // указатель на вершину равен нулю
// добавление узла дерева
void add_node(bin_tree* tree, int value);
// проверка на "пустоту" дерева, если указатель на вершину равен нулю, создает узел
void add_bin_tree(int value);
//Рекурсивно распечатываем это дерево от меньшего элемента к большему
void print(bin_tree* tree, int level);
int main()
{
int mass[] = {10, 12, 19, 92, 1, 9, 20, 10, 91, 61, 14, 88, 9};
for (int i = 0; i < sizeof(mass) / sizeof(int); i++)
add_bin_tree(mass[i]);
print(pHead, 0);
//cout<< pHead->value<< " "<< pHead->left->value<< " "<< pHead->right->value<< " ";
_getch();
return 0;
}
void add_node(bin_tree* tree, int value) // добавление конкретного узла дерева
{
if(value < tree->value)
{
if(tree->left != NULL) // если значение меньше, двигаемся по "левой ветке"
add_node(tree->left, value);
else
{
tree->left = new bin_tree;
tree->left->value = value;
tree->left->left = NULL;
tree->left->right = NULL;
}
}
if(value > tree->value) // иначе двигаемся по правой
{
if(tree->right != NULL)
add_node(tree->right, value);
else
{
tree->right = new bin_tree;
tree->right->value = value;
tree->right->left=NULL;
tree->right->right=NULL;
}
}
if(value == tree->value)
cout<< value<< " is already in tree"<< endl;
}
void add_bin_tree(int value)
{
if(pHead == NULL) // если дерево пустое - создадим первый узел
{
pHead = new bin_tree;
pHead->value = value;
pHead->left = NULL;
pHead->right = NULL;
}
else
add_node(pHead, value); // если в вершине уже что-то есть - добавляем слева или справа
}
void print(bin_tree* tree, int level)
{
if (tree->left != NULL)
print(tree->left, level + 1);
for (int i = 0; i < level; i++)
cout<< " ";
cout<< tree->value<< endl;
if (tree->right != NULL)
print(tree->right, level + 1);
}