Архив рубрики ‘Алгоритмы’

Шифр Цезаря

Дата: 28th Март 2011. Автор: Maxsbelt. Рубрика: C#, Java, Алгоритмы, ООП, Шифрование

Одним из древнейших шифров является шифр Цезаря. Этот шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами. Идея данного шифрования заключается в замене всех букв послания на буквы, находящиеся на n позиций от текущей в алфавите.

В этой статье мы рассмотрим алгоритм получения списка фундаментальных циклов для неориентированного, связного графа без петель. Кроме того, граф не является мультиграфом. Весь алгоритм можно расписать следующим образом:

Определяем, связан ли граф (Если нет — циклов нет);
Строим матрицу смежности остовного дерева графа;
Устраиваем цикл по хордам;
Выводим список фундаментальных циклов графа.
Приступим к реализации алгоритма

Алгоритм Дейкстры

Дата: 9th Июнь 2010. Автор: KAS. Рубрика: Графы
Метки: , ,

Алгоритм нахождения расстояния от источника до всех остальных вершин в графе с неотрицательными весами дуг — метод Дейкстры.

Алгоритм Форда-Белмана

Дата: 8th Июнь 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Алгоритм Форда-Белмана для поиска кратчайшего расстояния в графе. private void algFordaBelmana() { int s=Convert.ToInt32(textBox5.Text) — 1; //произвольная вершина графа, которая послужит началом пути int[] D=new int[n]; initGraph(); initMatrixWeight();   if (s < 0 || s >= n) return;   for (int i = 0; i < n; i++) { D[i] = A[s, i]; }   [...]

Цикл гамильтона

Дата: 6th Июнь 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Циклом Гамильтона называется путь проходящий через каждую вершину графа только 1 раз. Псевдокод: procedure ГАМИЛЬТ(k) {генерация всех гамильтоновых циклов, являющихся расширением последовательности X[1], . . ., X[k – 1]: массив X — глобальный } begin for y принадлежит ЗАПИСЬ [X[k – 1]] do if (k = n +1) and (y = v0) then write(X[1], . [...]

Рисуем стрелку

Дата: 30th Май 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Код для отрисовки стрелочки аля вектор //by Makar double u = Math.Atan((double)(y2 — y1) / (x2 — x1)); if (x2 < x1) { u += Math.PI; } int x = Math.Abs(x2 — x1) / 2 + Math.Min(x1, x2); int y = Math.Abs(y2 — y1) / 2 + Math.Min(y1, y2); if (y1 >= y2) { gr.DrawLine(pen, [...]

Циклы Эйлера

Дата: 19th Апрель 2010. Автор: KAS. Рубрика: Алгоритмы
Метки: , ,

Циклом Эйлера называется путь проходящий только 1 раз через каждое ребро графа. Для существования циклов Эйлера необходимо чтобы граф был связанный и все его вершины имели четную степень (кол-во ребер инцидентных вершине четно).

Компонентом связности называют максимально связанный порожденный подграф. Числом связности графа – кол-во компонент связности.