Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx200 / kursovaya(59).docx
Скачиваний:
58
Добавлен:
07.08.2013
Размер:
281.01 Кб
Скачать

2. Описание алгоритма работы. Блок-схема

1) Введем 3 массива: для учёта посещенных вершин, для сохранения текущего пути, и для запоминания индекса вершины, на которой произошёл переход на очередную ветку маршрута.

2) Флаги посещения устанавливаем в false. Индексы в массиве переходов устанавливаем в -1. Некоторую вершину выбираем текущей.

3) Для каждой смежной с текущей вершины (не учитывая предыдущие пути), если мы ее не посещали, сохраняем ее индекс в массиве переходов («на чём остановились»), текущей делаем найденную вершину и запоминаем ее в массиве пути.

4) Если вершин, смежных с текущей вершиной, на которых мы ещё не были, нет, то в массиве «на чём остановились» для текущей вершины записываем -1, помечаем данную вершину как непосещенную, делаем «откат» на 1 вершину в пути назад, соответственно текущей становится предыдущая вершина.

5) Работа функции прекращается с результатом true, если заполнен массив пути и если существует путь между последней найденной вершиной и первой. Если путь не найден и «откат» невозможен, то возвращаем false.

6) Переходим к шагу 2.

  1. 3. Пример решения задачи

Задача 1

Ручной счет

Рис.1

Тест программы

Рис.2

Задача 2

Ручной счет

Рис.3

Гамильтоновы циклы: 1,2,3,4,0,1; 1,3,2,0,4,1; 1,2,0,4,3,1; 1,0,2,3,4,1; 1,4,3,2,0,1; 1,4,0,2,3,1; 1,3,4,0,2,1;

Тест программы

Рис.4

Задача 3

Рис.5

Гамильтоновы циклы: 1,2,3,4,0,1; 1,0,4,3,2,1;

Тест программы

Рис.6

Заключение

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

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

В работе использовались биполярные транзисторы типа n-p-n ГТ122Б, резисторы ряда E24. Параметры всех элементов были указаны в ходе проведения расчётов, а также ниже, в разделе «Приложения».

Список используемой литературы

1. Дж. Макконнелл. Основы современных алгоритмов. 2-е дополнительное издание.

2. Ж. Трамбле, П. Соренсон – Введение в структуры данных. 1982г.

3. В.А. Евстигнеев, В.Н. Касьянов – Графы в программировании: обработка, визуализация и применение.

4. В.Л. Бурковский, Л.В. Холопкина, Н.Л. Райхель, О.Я. Кравец – Методы моделирования и анализа вычислительных систем. Учебное пособие. 1996г.

5. В. Липский – Комбинаторика для программистов. 1988г.

6. Ф. Харари – Теория графов. 1973г.

Приложения

Приложение 1.

Код программы:

#include "stdafx.h"

#include <stdio.h>

#define n 10

bool boo[n];

int way[n], r[n];

int a[n][n]=

{

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0

};

bool gamilton(int start)

{

int cur = start; int next = 0; way[next++] = cur; bool found;

while (true)

{

found = false;

boo[cur] = true;

for (int i = r[cur] + 1; i < n; i++)

if (i != cur && (a[i][cur] || a[cur][i]) && !boo[i])

{

found = true;

r[cur] = i;

way[next++] = cur = i;

break;

}

if (!found)

{

if (next == 1) return false;

r[cur] = -1;

boo[cur] = false;

cur = way[--next - 1];

}

else

if (next == n && (a[cur][start] || a[start][cur])) return true;

}

}

int _tmain(int argc, _TCHAR* argv[])

{

int i;

printf("Solution:\n");

for (i = 0; i < n; i++) { boo[i] = false; r[i] = -1; }

if (gamilton(1))

{

for (i = 0; i < n; i++) printf("%d ", way[i]);

printf("%d\n", way[0]);

}

else

printf("Solution Not Found!\n");

getchar();

}

Таганрог, 2019 г.

Соседние файлы в папке курсовая docx200