Автор: Пользователь скрыл имя, 03 Ноября 2012 в 16:36, контрольная работа
В течение последних десятилетий были достигнуты большие успехи в конструировании и анализе комбинаторных алгоритмов. С одной стороны, было обнаружено много новых, более эффективных методов решения комбинаторных задач с помощью ЭВМ, с другой — получены теоретические результаты, свидетельствующие все более явно о том, что для широкого класса проблем не существует «достаточно эффективных» алгоритмов.
Введение…………………………………………………………… 3
Основные понятия………………………………………………… 4
Алгоритм поиска гамильтонова пути в графе…………………… 8
Заключение………………………………………………………… 11
Список использованной литературы…………………………….. 12
такой что P(X[1], . . .,X[k − 1], y)
then
5 begin X[k] := y; (* элемент y использован*)
6 if (X[1], . . .,X[k]) является целочисленным решением then
7 write(X[1], . . .,X[k]);
8 k := k + 1
9 end
10 else (* возврат на более короткое частичное решение;
все элементы множества Ak вновь становятся неиспользованными *)
11 k := k − 1
12 end
Этот алгоритм находит все решения в предположении, что множества Ak конечные и что существует n, такое что P(x1, . . . , xn)=ложь для всех x1 Î A1, . . . , xn Î An (последнее условие означает, что все решения имеют длину меньше n).
Алгоритм, организованный на языке Python
Заключение
Часто бывает полезно и наглядно изображать некоторую ситуацию в виде рисунка, состоящего из точек (вершин), представляющие основные элементы ситуаций, и линий (ребер), соединяющих определенные пары этих вершин и представляющих связи между ними. Такие рисунки известны под общим названием графов, и эта работа частично посвящена их изучению. Графы встречаются во многих областях под разными названиями.
Благодаря
своему широкому применению
Поэтому в
данной работе основное
Определяющим для моего изложения явилось желание создать цельное и логически стройное начальное представление о теории графов и алгоритма поиска гамильтонова пути в графе.
Список использованной литературы
1. Липский В., Комбинаторика для программистов., 1988, Москва
2. Кристофидес Н., Теория графов. Алгоритмический подход., 1978, Москва
3. Татт У., Теория графов., 1988, Москва
Приложение 1.
def Hamilt(G):
n = len(G)
k = 0
res = []
cur = 0
used = [False for i in range(n)]
while (k >= 0):
flag = False
for i in range(cur, n):
if not used[i] and ((k == 0) or (G[res[k-1]][i] == 1)):
res.append(i)
used[i] = True
k = k + 1
cur = 0
flag = True
break
if (k == n):
print res
break
if not flag:
if (k > 0):
cur = res[-1] + 1
used[res[-1]] = False
del(res[-1])
k = k - 1
if (k < 0):
print "No solution."
примеры:
g1 =[[0, 0, 1, 1],
[0, 0, 1, 1],
[1, 1, 0, 1],
[1, 1, 1, 0]]
Hamilt(g1)
g2 =[[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
[1, 1, 1, 0]]
Hamilt(g2)