Pull to refresh
13
0
hadrus @hadrus

User

Send message

Реализация алгоритма Дейкстры на C#

Reading time 11 min
Views 43K

Введение


Всем привет, пишу данный топик как логическое продолжение данной статьи о максимальном потоке минимальной стоимости, в конце которой был затронут алгоритм Дейксты. Соглашусь с автором, что описание и различные реализации алгоритма можно найти без проблем, и «колесо» я не изобретаю, но тем не менее опишу здесь практическую реализацию на языке C#. Кстати отмечу, что использую LINQ, так что для работы необходим NET 3.5.

UPDНаконец-то подчистил код :)

Немного теории


Чтобы сразу не кидали камни в мой огород дам ссылку на очень хорошее описание алгоритма на таком незаметном ресурсе как Википедия :). Там вполне доступно описан алгоритм и особенно рекомендую посмотреть пример. Копировать оттуда материал считаю бессмысленно. Все, считаем что теорию изучили.

Начало


Данный код представляет реализацию алгоритма на взвешенном неориентированном графе. Рассмотрим реализацию этого алгоритма.
Объектами данного алгоритма являются три класса:
• Apoint – класс, реализующий вершину графа
• Rebro – класс, реализующий ребро графа
• DekstraAlgoritm – класс, реализующий алгоритм Дейкстры.
Рассмотрим подробнее данные классы и самые важные методы.
APoint
Данный класс содержит в себе 5 полей:
•public float ValueMetka { get; set; } данное поле отвечает за хранение значений метки данной вершины. В программе под бесконечностью берется очень большое число, например 99999.
•public string Name { get; set; } – имя метки. Данное поле необходимо лишь для выведения удобно читаемого результата.
•public bool IsChecked { get; set; } – означает помечена метка или нет
•public APoint predPoint { get; set; } – «предок» точки, т.е. та точка которая является предком текущей в кратчайшем маршруте.
•public object SomeObj { get; set; } – некий объект
Каких-либо значимых методов данный класс не содержит.
Rebro
Данный класс содержит 3 поля:
•public APoint FirstPoint { get; set; } – начальная вершина ребра
•public APoint SecondPoint { get; set; } – конечная вершина ребра
•public float Value { get; set; } – весовой коэффициент.
Каких-либо значимых методов данный класс не содержит.
DekstraAlgorim
Данный класс представляет собой граф и реализацию алгоритма Дейкстры. Содержит 2 поля:
•public APoint[] points { get; set; } – массив вершин
•public Rebro[] rebra { get; set; }- массив ребер
Таким образом, эти 2 массива отражают граф. Рассмотрим методы:
•private APoint GetAnotherUncheckedPoint()
Данный метод возвращает очередную неотмеченную вершину, наименее удаленную, согласно алгоритму.
•public void OneStep(APoint beginpoint)
Данный метод делает один шаг алгоритма для заданной точке.
•private IEnumerable Pred(APoint currpoint)
Данный метод ищет соседей для заданной точки и возвращает коллекцию точек.
•public string MinPath(APoint begin,APoint end)
Данный метод возвращает кратчайший путь, найденный в алгоритме от начальной точке до конечной. Этот метод используется для наглядного отображения пути
•public void AlgoritmRun(APoint beginp)
Данный метод запускает алгоритм и принимает в качестве входа начальную точку.
Все основные методы описаны, представим процесс работы алгоритма в целом на рис.1. Основной метод OneStep представлен на рисунке 2.
image
Рис.1. Работа алгоритма в целом
image
Рис.2. Работа метода OneStep

Код


Наконец, рассмотрим сам код. В каждом классе написал подробные комментарии.
Читать дальше →
Total votes 43: ↑16 and ↓27 -11
Comments 20

Покупаем новые Kindle и Nexus 4,7 без посредников

Reading time 1 min
Views 249K
Мне кажется, многие хабражители не знают, что жизнь потихоньку налаживается.
Долгое время, чтобы приобрести новинку раньше всех, нужно было прибегать к ухищрениям вроде использования VPN\Tor и услугам посредников. Теперь же когда ситуация с работой Почты РФ понемногу нормализовывается, Амазон тоже приготовил маленький приятный сюрприз. Новые Kindle и Nexus 7 можно просто купить с доставкой в Россию. Стоимость доставки 20-40 баксов. Обращаю внимание, что в этом случае налоги штата платить не придется.

image

Kindle Paperwhite, 6"
139$
High Resolution Display with Built-in Light, Wi-Fi
image
Google Nexus 7
16 gb -229$, 32 gb — 289 269$
FHD Tablet (7-Inch, 32GB, Black) by ASUS (2013)
image
LG E960 Google Nexus 4

От $267.99 В РФ отправляет магазин BESTDEAL TECH.

Пруфпик


UPD В комментариях утверждают, что доставка будет в обход Почты РФ.
UPD 2 Доставляется только Киндл без встроенной рекламы и без аксессуаров. Чехлы, к примеру, можно взять тут.
UPD 3 Альтернативная ссылка для тех, у кого не получается приобрести Киндл.
UPD 4 Список городов с беспроблемной доставкой грузов дороже 200 евро через UPS: Москва, Санкт-Петербург, Краснодар, Владивосток, Ставрополь, Новороссийск и Нижний Новгород.
UPD 5 Добавил Нексус 4, тоже есть доставка. не самая выгодная цена, но зато «заказал-забыл-получил».
UPD 6 В Москву пришло за 5 дней.
Читать дальше →
Total votes 88: ↑69 and ↓19 +50
Comments 168

SSD и HDD в теле одного MacBook Pro

Reading time 4 min
Views 162K
Приветствую, уважаемые хабражители.

Мой опыт, которым я хочу с вами поделиться, должен оказаться полезным для всех пользователей ноутбуков, хотя мой частный пример — MacBook Pro.

После покупки сего агрегата, с порядковым номером в линейке: 6.1, я ожидал невиданных ранее скоростей, но, увы, предательская каруселька перегрузки, на месте курсора > image появлялась достаточно часто, заставляла себя ждать, мучила вопросом «как так?!» при этом скорость загрузки тотально укомплектованной операционной системы составляла примерно 2+ минуты, с загрузкой 5-и приложений (различной тяжести) на автозапуске.

Такие показатели + периодические подвисания оказались досадным и обидным заключением, ведь под капотом процессор i7 / 4Gb DDR3 / 5 Series Chipset с возможной скоростью обмена данными в 3 гигабита.

Тогда я решил разобраться с досадной загвоздкой в скорости работы и решить проблему апгрейдом доступных внутренностей ноутбука; не смотря на то, что сам по себе ноутбук уже встал в солидную копеечку, мириться с такой его манерой работы — я не мог.

Добро пожаловать под хабракат, там сказ о эффективном разгоне моего инструмента.
Total votes 113: ↑94 and ↓19 +75
Comments 185

Загрузочный телефон

Reading time 1 min
Views 40K
У вас наверняка есть «обычный сотовый телефон», умеющий звонить, играть музыку с флеш-карты и прикидываться по случаю кардридером при подключении к «большому брату». Ну или был. Или есть у вашей второй половины/родителей/детей/бабушек/дедушек/etc. Вы никогда не думали использовать его более гиковским способом, чем просто средство связи? Я не имею в виду модификацию прошивок и получение консольного доступа к самому телефону, нет — все намного банальнее и интереснее одновременно.


рецепт приготовления
Total votes 342: ↑278 and ↓64 +214
Comments 133

Обрабатываем картинки средствами Photoshop и ExtendScript Toolkit

Reading time 11 min
Views 41K
Часто нам бывает надо сделать что-то с пачкой картинок. Есть несколько способов добиться этого:
  • используя ImageMagick – очень удобная консольная утилита, много чего умеющая
  • на The GIMP – там есть Scheme (диалект lisp-а) и Python
  • штатными средствами: PHP+gd / Powershell+System.Drawing / Python + PIL
  • в photoshop-е на JScript, VBScript или AppleScript
Плюсы минусы последнего способа рассмотрим под катом. В качестве бонуса посмотрим на недокументированное API Photoshop-а.
Читать дальше →
Total votes 42: ↑34 and ↓8 +26
Comments 36

Мошенничество с использованием пластиковых карт

Reading time 3 min
Views 503K
Ещё один сценарий мошенничества с использованием пластиковых банковских карт. Наиболее уязвимы карты Сбербанка, пригодные для платежей в интернете — начиная от Visa Classic и MasterCard Standard. Владельцы «зарплатных» Maestro и прочих Momentum данному приёму не подвержены.
Читать дальше →
Total votes 241: ↑221 and ↓20 +201
Comments 279

Все способы заработка в интернете (инфографика)

Reading time 1 min
Views 4.7K
Каждый сегодня делает деньги в интернете… или по крайней мере пытается.

В Fast Company собрали все возможные способы заработка денег в интернете и изобразили их в виде инфографики.

Сколько способов которые показаны здесь, вы активно используете для заработка денег в интернете?
Читать дальше →
Total votes 108: ↑83 and ↓25 +58
Comments 35

Доброкнижка про HTML5 от Google

Reading time 1 min
Views 2.2K
Пока в интернетах идут войны на тему HTML5, убьет он Flash или нет, компания Google выпустила онлайн книгу 20 Things I Learned About Browsers & The Web. И это действительно книга!

Ребята создали веб-приложение, напоминающее детскую книгу, ее можно листать, оставлять закладки, а посвящена она веб-технологиям.
Читать дальше →
Total votes 121: ↑111 and ↓10 +101
Comments 90

VKFS — Файловая система для VKontakte на основе Fuse

Reading time 1 min
Views 48K
Не так давно на хабре (и на лепре, и еще где-то) появилась такая гифка:
image
Я посидел и подумал: «А почему бы и нет?»
Прошло некоторое время и, как я и обещал
Встречайте! VKFS — файловая система vkontakte, основаная на fuse.
Это не релиз — пока что реализована только возможность чтения собственной стены, но уже готов весь «каркас» для этого всего.
Читать дальше →
Total votes 247: ↑214 and ↓33 +181
Comments 159

Andrea Mosaic — мозаика быстро и лаконично

Reading time 2 min
Views 30K
Сегодня хочется рассказать о том, как создать такие картинки.
Не видите ничего особенного? Можете сделать так своими руками? Загляните под кат.




Картинка кликабельна. (Трафик, осторожно!)

Upd: Заменил картинку на более важную сегодня.
Узнать,как такое сделать без фотошопа
Total votes 114: ↑73 and ↓41 +32
Comments 44

Интернет сделан из кошек

Reading time 1 min
Views 1K
Полностью абсурдная, но забавная, песенка о том, что интернет на самом деле сделан из кошек :)



P.S. Видео полностью на английском, но смысл более-менее понятен, в т.ч. по субтитрам.
Total votes 98: ↑67 and ↓31 +36
Comments 33

100 indie и просто разных игр за 10 минут

Reading time 1 min
Views 765
Превосходная нарезка геймплея кучи разных игр (как правило, indie, есть opensource, игр вроде Asassins Creed или FarCry тут нет). В углу есть название каждой игры. Записываем в блокнотик понравившиеся, ищем, качаем, играем.
Total votes 53: ↑40 and ↓13 +27
Comments 32

Простейший информер на Automator

Reading time 4 min
Views 26K
Automator

В первом своем посте на данном ресурсе хотел бы описать простейший пример создания информера, с помощью колоссально удобной утилиты Automator, идущей в комплекте с Mac Os X.

Буквально на днях, при радикальном снижении уличной температуры в Москве у меня внезапно появилась задача: визуально отслеживать температуру в серверном помещении (а точнее в стойке), с определенным интервалом, т.к. кондиционер, обслуживающий помещение, отказался работать при T < -15 ºC.

Читать дальше →
Total votes 36: ↑31 and ↓5 +26
Comments 14

Создатели простенького аксессуара для iPhone 4 профинансированы в 10 раз больше запрошенного

Reading time 2 min
Views 1.6K
GlifСоздатели держателя оригинальной конструкции для iPhone 4 Томас Герхард и Дэн Провост (Thomas Gerhardt and Dan Provost) получили на финансирование своей идеи более $100k и продолжают набирать обороты. Изначально они заявили о необходимости в десять раз меньшей суммы. Деньги собираются с помощью сайта Kickstarter — площадки для коллективного финансирования креативных идей.

Держатель, названный авторами «Glif», представляет из себя адаптер для крепления iPhone 4 на обычные штативы плюс подставку, позволяющую установить смартфон под наклоном на плоских поверхностях.
Читать дальше →
Total votes 80: ↑69 and ↓11 +58
Comments 60

Краш-тест мобильного телефона Apple iPhone 4 (16Gb)

Reading time 1 min
Views 4.8K
Технокраш уже протестировал дюжину мобильных устройств. Последним стал iPhone 4, набравший 94 балла из 100 и «погибший» в тесте с…

Об этом вы узнаете в видеоролике.

Если хотите подробностей, милости прошу на страницу со статьей. Если быстро, то видеоролик.

Total votes 143: ↑112 and ↓31 +81
Comments 166

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity