Данный алгоритм предназначен для нахождения кратчайших расстояний между всеми вершинами взвешенного ориентированного графа. Над матрицей выполняется некоторое количество итераций. После k-й итерации matrix[i,j] содержит значение наименьшей длины путей из вершины i в вершину j, которые не проходят через вершины с номером, большим k. Между вершинами пути i и j могут находиться только те вершины, номера которых […]
Рубрика: C++ (задачи)
Транзитивное замыкание графа
Транзитивным графом называется такой граф, в котором из существования дуг (xi, xj) и (xj, xk) следует существование дуги (xi,xk). Транзитивным замыканием графа G называется граф G’=(V, E∪E’), где E’ — минимальное множество дуг , которое следует добавить к графу G, чтобы он стал транзитивным. Сегодня мы рассмотрим реализацию алгоритмы транзитивного замыкания графа. Существует несколько способов произвести […]
Создание библиотеки String
Суть задачи заключается в том, чтобы познакомиться с устройством библиотеки string (библиотека для работы со строками) и понять, как самостоятельно писать библиотеки. В данной задаче необходимо реализовать: сравнение строк, сложение (конкатенация строк), вывод строки и разбить на два файла (можете записать в один файл весь код (классы сверху, main внизу)). Реализация через классы. Создаём нашу […]
«Черепаха»
Классическая задача на алгоритмы под незатейливым названием «Черепаха». Суть задачи заключается в том, чтобы определить количество возможных проходов из точки А в точку Б. Читаем данные из файла и пишем результат в файл. Входные данные для обработки (то, что заносим вручную):
1 2 3 4 |
00000 01010 01010 00000 |
Выходные данные (то, что должны получить после выполнения программы):
1 2 3 4 |
11111 10101 10101 11223 |
Задача реализуется через […]
Бинарное дерево
Необходимо построить дерево двоичного поиска, элементами которого являются целые числа. Данные хранятся в файле (в нём записано через пробел в одну строку числа (например: 1 2 3 6 9)). Вывести элементы дерева на экран используя следующие обходы дерева: а) инфиксным обходом б) постфиксным обходом в) префиксным обходом Также нужно реализовать следующие функции: г) Найти сумму […]
Первая программа
Сегодня мы познакомимся с языком программирования C++ и напишем код «Первая программа величайших программистов». В данной главе мы напишем первый код и познакомимся с жизненно важными функциями без которых дальше ни куда и будем осваивать «привычки» профессиональных программистов. Откройте свой компилятор (он может быть любым, но настоятельно НЕ рекомендую онлайн-компиляторы, если у вас медленный интернет, ждать […]
«Домофон»
Суть задачи домофон заключается в том, чтобы сымитировать работу домофона используя классы. Домофон умеет отвечать, открывать дверь, закрывать её, отвечать, что хозяина нет дома, то есть быть гостю автоответчиком…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#include <iostream> #include <string> #include <ctime> class Domophon { private: int number, max_number; public: Domophon() { number = 0; max_number = 0; } void open_door() { srand((unsigned)time(NULL)); int e = rand() % 4; if (e == 0) { std::cout << "\nХозяина дома нет, проход воспрещён\n"; } else { std::cout << "\nдверь открыта\n"; } } void exit_door() { std::cout << "\nдверь закрыта\n"; } void max() { int max_num; std::cout << "Введите максимальное кол-во квартир: "; std::cin >> max_num; std::cout << "\n"; max_number = max_num; } void num() { int num; std::cout << "Введите номер квартиры: "; std::cin >> num; number = num; } void proverka() { if (number > max_number) { while (1) { if (number > max_number) { std::cout << "Такой квартиры здесь нет" << "\n"; std::cout << "\tВведите номер квартиры: "; std::cin >> number; } else { break; } } } } }; int main() { setlocale(LC_ALL, "Russian"); Domophon z; z.max(); z.num(); z.proverka(); z.open_door(); z.exit_door(); system("pause"); return 0; } |
Корень в корне у корня…
Корень. В задаче заведомо неизвестно количество подкоренных вложений подкоренных выражений, поэтому возникает необходимость составить рекуррентное выражение для вычисления данного выражения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <iostream> #include <fstream> using namespace std; int main() { setlocale(LC_ALL, "Russian"); double n; double x; cout << "X: "; cin >> x; cout << endl; cout << "N: "; cin >> n; cout << endl; int i = 0; double a = sqrt(x); cout << a << endl; int count_precision = 5; ofstream result_sqrt("result_sqrt.txt"); result_sqrt.precision(count_precision); result_sqrt << a << endl; cout.precision(count_precision); while (i < n) { a = sqrt(x + a); cout << "\t\t\t" << scientific << a << endl; result_sqrt << fixed << a << endl; i++; } result_sqrt.close(); system("pause"); return 0; } |
«Рюкзак»
Имеется рюкзак, вместимость которого W и набор из N предметов, причём i-ый предмет займёт Wi места, если положить его в рюкзак, и имеет ценность Ci. Вашей задачей является собрать в рюкзаке набор предметов, имеющий максимальную суммарную ценность. Входные данные На первой строке два целых числа W и N. На каждой из последующих N строк по два […]