
- •Лабораторная 3 Задание 1
- •Варианты заданий
- •Перебрать все монотонно неубывающие функции f: [m] [n].
- •Найти сумму.
- •Найти произведение .
- •Пример выполнения задания 1
- •Задание 2
- •Варианты заданий
- •Пример выполнения задания 2
- •Лабораторная 4 Задание
- •Варианты заданий
- •Пример выполнения задания
- •Входные данные:
Пример выполнения задания 2
Задание. Найти гамильтонов цикл в графе, заданном с помощью матрицы смежности.
Решение. Возьмем схему перебора с возвратом, рассмотренную для гамильтоновых циклов в п. 1.3. Мы модифицируем её так, чтобы программа заканчивала работу при обнаружении гамильтонова цикла. Подпрограмма будет возвращать значение 1 в случае нахождения гамильтонова цикла, и 0 – если таких циклов в графе нет. Получим следующую схему подпрограммы:
int gamilton(int k)
{
int v, q1=0; //q1 – возвращаемое значение
for(yAk&&(q1==0))
{
//Ak – смежные с xk-1 вершины
if(k==n&&v=v0) q1=1;
else
{
xk=y; c[y]=k;
q1=gamilton(k+1);
if(q1==0)c[y]=0;
}
else continue;
}return q1;
}
main()
{
обесцветить вершины;
раскрасить c[0]=0;
if(gamilton(1))вывод;
else printf(“нет решений”);
}
Детализируя её, приходим к следующему тексту программы:
// gamiltg1.cpp -- гамильтонов путь
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#define n 10
int c[n] ; // номер хода, на котором посещается вершина
int path[n]; // номера посещаемых вершин
int v0=2; // начальная вершина
//Матрица смежности
int a[n][n]=
{
0,0,0,0,0,1,0,0,0,0,
0,0,1,0,0,0,1,0,0,0,
0,1,0,1,0,0,0,1,0,0,
0,0,1,0,1,0,0,0,1,0,
1,0,0,1,0,0,0,0,0,1,
0,0,0,0,0,0,1,0,0,1,
0,0,0,1,0,0,0,1,0,0,
0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,
0,0,0,0,0,0,0,0,0,0
};
void prnt(void)
{
int p;
for ( p = 0 ; p<n ; p++)
printf("%d ", path[p] ) ;
printf("%d ", path[0] ) ;
printf("\n") ;
}
//подпрограмма нахождения гамильтонова цикла
int gamilton ( int k)
{
int v,q1=0;
//, n=sizeof(a)/2;
for(v=0; v<n && !q1; v++)
{
if(a[v][path[k-1]]||a[path[k-1]][v])
{
if (k==n && v==v0 ) q1=1;
else if (c[v]==-1)
{
c[v] = k ; path[k]=v;
q1=gamilton (k+1) ;
if (!q1) c[v]=-1;
} else continue;
}
} return q1;
}
main()
{
int j;
clrscr() ;
printf("Гамильтонов цикл:\n");
for(j=0;j<n;j++) c[j]=-1;
path[0]=v0 ;
c[v0]=v0;
if(gamilton (1)) prnt(); else printf("Нет решений\n");
}
Результат работы программы
Гамильтонов цикл:
2 1 6 3 8 9 5 0 4 7 2
Отметим,
что матрице смежности в рассмотренном
примере соответствует следующий плоский
граф:
Лабораторная 4 Задание
Сравнить два указанных метода сортировки, вычислив
-
время выполнения;
-
число сравнений;
-
число перестановок.
Варианты заданий
|
Метод пузырьков |
Метод выбора |
Двоичные вставки |
Метод Шелла |
Быстрая Хоара |
Обменная поразрядная |
Турнир с выбыванием |
Пирамидальная |
Простые вставки |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Метод пузырьков |
- |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
Метод выбора |
- |
- |
16 |
17 |
18 |
19 |
20 |
21 |
Двоичные вставки |
- |
- |
- |
22 |
23 |
24 |
25 |
26 |
Быстрая Хоара |
- |
- |
- |
- |
- |
27 |
28 |
29 |
Обменная поразрядная |
- |
- |
- |
- |
- |
- |
30 |
- |