Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Otchet_6_2_semestr_DM (1)

.doc
Скачиваний:
8
Добавлен:
19.01.2015
Размер:
62.46 Кб
Скачать

Звіт

Лабораторна робота №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);

}

Соседние файлы в предмете Дискретная математика