
Решение.
Пример орграфа и матрицы инцидентности:
| 0 1 2 3 4 5
0 1 -------------------------------
0
| -1 0 0 1 0 0
4 mi
= 1 | 1 -1 0 0 1 0
3
2 2 | 0 1 1 0 0 0
3
| 0 0 -1 -1 -1 2
5
Пример результата выполнения функции:
Вершина Число предшественников
-
1
-
2
-
2
-
1
Фрагмент программы:
#define NMAX 10 /* макс. число вершин */
#define RMAX 100 /* макс. число ребер (дуг) */
/*---------------------------------------------------------*/
/* функция вывода числа предшественников каждой вершины */
/*---------------------------------------------------------*/
void KolPred( int mi [NMAX][RMAX], int n, int d )
/* Входные данные: mi – матрица инцидентности ,
n – количество вершин ,
d – количество дуг */
{ int i,j ; /* индексы строки и столбца матрицы */
int kpred; /* количество предшественников очередной вершины */
puts ("\n Вершина Число предшественников");
for (i=0; i<n; i++)
{
for (j=0, kpred=0; j<d; j++)
if (mi[i][j] == 1 || mi[i][j] ==2) kpred++;
printf (" %d \t\t %d\n", i, kpred);
}
putchar ('\n');
}
/* Пример вызова функции */
int g2 [NMAX][RMAX] ; /* м-ца инцидентности */
n , /* количество вершин */
d ; /* количество дуг */
. . .
KolPred (g2, n, d );
Пример 6. Дан орграф в виде матрицы смежности и числа вершин. Описать функцию вывода числа предшественников каждой вершины. Привести пример вызова этой функции.
Решение.
Пример орграфа и матрицы смежности:
| 0 1 2 3
----------------------
0
| 0
1
0 0
ms
= 1 | 0 0 1 0
2
| 0 0 0 0
3
| 1
1
1
1
Пример результата выполнения функции:
Вершина Число предшественников
-
1
-
2
-
2
-
1
Фрагмент программы:
#define NMAX 10 /* макс. число вершин */
/*---------------------------------------------------------*/
/* функция вывода числа предшественников каждой вершины */
/*---------------------------------------------------------*/
void KolPred( int ms [NMAX][NMAX], int n)
/* Входные данные: ms – матрица смежности ,
n – количество вершин */
{ int i,j ; /* индексы строки и столбца матрицы */
int kpred; /* количество предшественников очередной вершины */
puts ("\n Вершина Число предшественников");
for (j=0; j<n; j++)
{
for (i=0, kpred=0; i<n; i++)
if (mi[i][j] == 1) kpred++;
printf (" %d \t\t %d\n", j, kpred);
}
putchar ('\n');
}
/* Пример вызова функции */
int g2 [NMAX][RMAX] ; /* м-ца инцидентности */
n , /* количество вершин */
d ; /* количество дуг */
. . .
KolPred (g2, n, d );
Рекомендуемая литература
а) Основная литература
1. Хохлов Д.Г. Введение в программирование: Учебное пособие.- Казань: Изд-во Казан. техн. ун-та, 2005. - 136 с.
2. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. техн. ун-та, 2006. - 100 с.
3. Хохлов Д.Г., Захарова З.Х. Введение в программирование. Практикум на языке С: Учебное пособие. - Казань: Изд-во Казан. техн. ун-та, 2006. - 96 с.
4. Хохлов Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие.- Казань: Изд-во Казан. техн. ун-та, 2005. - 48 с.
5. Бикмурзина А.Р. Лабораторный практикум по программированию. - Казань: КГТУ, 2000 г., 2007 г.
6. Хохлов Д.Г. Основы технологии модульного программирования. Учебное пособие. - Казань. Изд-во Казан. техн. ун-та , 2005. - 64 с.
7. Хохлов Д.Г. Программирование на языке высокого уровня. Часть 1: Основы программирования: Учебник. - Казань: Кафедра АСОИУ, 2007. - 248 с.
8. Хохлов Д.Г. Программирование на языке высокого уровня. Часть 2: Методы программирования: Учебник. - Казань: Мастер Лайн, 2006. - 266 с.
9. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - СПб: Питер, 2004. - 461с.
10. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. - СПб: Питер, 2002. - 240с.
б) Дополнительная литература
11. Керниган Б., Ритчи Д. Язык программирования Си.- М.: Финансы и статистика, 2002. - 279 с.
12. Вирт Н. Алгоритмы + структуры данных = программы. - М.: Мир, 1985. - 406 с.
13. Липский В. Комбинаторика для программистов. - М.: Мир, 1988.- 213 с.
14. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. - М.: МЦНМО, 2000. - 960 с.
15. Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы. Теория и практика. - М.: Мир, 1980. - 476 с.
16. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. - М.: Мир, 1981. - 368 с.
17. Кнут Д. Искусство программирования на ЭВМ. Т. 1. Основные алгоритмы. - М.: Издат. Дом «Вильямс», 2000. - 720 с., Т. 2. Получисленные алгоритмы. - М.: Издат. Дом «Вильямс», 2000. - 832 с., Т. 3. Сортировка и поиск. - М.: Издат. Дом «Вильямс», 2000. - 832 с.
18. Холл П. Вычислительные структуры. Введение в нечисленное программирование. - М.: Мир, 1978. - 214 с.
19. Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ.- М.: Наука, 1986. - 272 с.