Представьте, что вы находитесь в лаборатории. Вы исследуете умение крыс ориентироваться в незнакомых лабиринтах. У вас есть конструктор для создания односвязных лабиринтов. Односвязный лабиринт - означает, что лабиринт не содержит замкнутых маршрутов, т.е. таких, которые образуют замкнутую петлю. Замкнутый маршрут возникает в том случае, если существует ограниченный стенками «остров», который не соединяется с другими стенками лабиринта.
Чтобы анализировать поведение крысы в лабиринте, вам необходимо заранее знать кратчайший маршрут от точки входа, до сыра, расположенного в этом лабиринте. Так как подсчет длины кратчайшего пути - достаточно рутинная работа, вы решили запрограммировать робо-мышь, которая ищет длинну кратчайшего пути автоматически.
Вашей конечной задачей является подсчет минимального количества шагов, за которые крыса может добраться от точки входа до сыра.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<doublecmd DCVersion="1.0.6 beta" ConfigVersion="10"> | |
<Colors> | |
<UseCursorBorder>False</UseCursorBorder> | |
<CursorBorderColor>-2147483635</CursorBorderColor> | |
<UseFrameCursor>False</UseFrameCursor> | |
<Foreground>65280</Foreground> | |
<Background>-2147483640</Background> | |
<Background2>-2147483640</Background2> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SOME DESCRIPTIVE TITLE. | |
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
# This file is distributed under the same license as the PACKAGE package. | |
# | |
# Translators: | |
# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2014-2019 | |
# insolor, 2014 | |
# insolor, 2014 | |
# Чук Таблицоменделеев <aurum444an@gmail.com>, 2019 | |
msgid "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Learn more about F# at http://fsharp.org | |
// See the 'F# Tutorial' project for more help. | |
open System; | |
open System.Collections.Generic; | |
// Метод 01. Простые суммы | |
let SubArrayWithMaxAbsSum1 (inputArray: int[]) = | |
// Почему бы не завести два массива для положительных и отрицательных? | |
let mutable positive = Array.empty | |
let mutable negative = Array.empty |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
namespace Task138cs | |
{ | |
class Program | |
{ | |
/* Метод 01. Простые суммы */ | |
private static int[] SubArrayWithMaxAbsSum1(int[] inputArray) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
#include <complex> | |
#include <numeric> | |
/* Метод 01. Простые суммы */ | |
// Возвращает подмассив с максимальной суммой по модулю | |
std::vector<int> sub_array_with_max_abs_sum1(const std::vector<int>& input_array) | |
{ | |
// Почему бы не завести два массива для положительных и отрицательных? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 01_1. Факторизация с максимальных цифер */ | |
#include <iostream> | |
#include <vector> | |
#include <algorithm> | |
// Введем ENUM для удобства восприятия, в котором -1 - набор множителей не найден, а 1 - найден оптимаьный набор множителей | |
enum status { NOT_FOUND = -1, DONE = 1 }; | |
// Рекурсивная функция. Вычисляет очередной текущий множитель и добавляет его в вектор | |
int factor(unsigned remainder, std::vector<int> &multipliers) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Самое главное что нужно знать, что в односвязном лабиринте к точке выхода ведет всегда только один путь. | |
Еще один момент, который нужно учитывать, что добраться до выхода можно используя "Правило руки": | |
"...Один из методов состоит в том, чтобы в каждой узловой точке выбирать одно и то же направление. | |
Например, можно всегда сворачивать на крайнюю правую ветвь. Если этот путь закончится тупиком, следует вернуться к узловой точке | |
и выбрать следующую ветвь (если считать справа). Может оказаться, что в результате вы пройдете по каждой ветви дважды — по одному разу | |
в каждом направлении, но в конце концов вы доберётесь до цели. На обратном пути можно либо продолжать выбирать крайние правые ветви | |
в каждом узле (и в этом случае вы, вероятно, пройдёте по новым областям лабиринта), либо каждый раз сворачивать на крайнюю левую ветвь | |
(и тогда вы в точности повторите первоначальный маршрут). Метод выбора одной и той же — правой или левой — ветви я называю | |
соответственно правилом правой или левой руки..." |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 01. Метод "Перебор всех возможных комбинаци слоев" */ | |
#include <iostream> | |
// рекурсивная функция для подсчета. | |
// remainder_blocks - оставшееся количество не использованных блоков | |
// count по ссылке - счетчик для подсчета возможных вариантов | |
// used_blocks - количество уже используемых блоков | |
// last_layer_lenght - ширина количества блоков в последнеем слое пирамиды | |
void calc_top_layers(int remainder_blocks, unsigned long & count, int used_blocks, int last_layer_lenght) | |
{ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Learn more about F# at http://fsharp.org | |
// See the 'F# Tutorial' project for more help. | |
// Функция подсчета всех возможных вариантов пирамид | |
let CountPosiblePiramids N = | |
// Рекурсивная функция с параметрами ОСТАТОК блоков, максимальная длинна текщего слоя из блоков и количество возможных пирамид | |
let rec CalcTopLayer remainder maxLenght count = | |
// Счетсик делаем изменяемым | |
let mutable currCount = count | |
// Если остаток и максимальная длинна корректны | |
if remainder >= 0 && maxLenght >= 0 then |
NewerOlder