Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 20.1

#define NMAX 10 /* макс. число вершин */

#define RMAX 55 /* макс. число ребер */

/* RMAX = NMAX * (NMAX - 1) / 2 + NMAX; */

int v1 [RMAX]; /* массивы смежных */

int v2 [RMAX]; /* вершин */

int n; /* число вершин графа */

int r; /* число ребер графа */

 

2. Матрица смежности – это квадратная матрица размерности n*n (n – число вершин), в которой элемент

 

 

1, ли есть дуга i –> j,

ms[i][j] =

0 в противном случае.

 

Пример матрицы смежности для графа, представленного на рис. 20.1.а:

| 0 1 2 3 4 5

----------------------------

0 | 0 1 0 0 0 1 Для неориентированного графа матрица

1 | 1 0 1 1 1 0 смежности симметрична относительно

2 | 0 1 0 0 0 0 главной диагонали.

3 | 0 1 0 0 1 1

4 | 0 1 0 1 0 0

5 | 1 0 0 1 0 0

 

Пример 20.2. Ввод с клавиатуры неориентированного графа в виде последовательности ребер и формирование матрицы смежности. Конец ввода ребер отмечается нажатием клавиш Ctrl – Z (конец файла).

 

#define NMAX 10 /* макс. число вершин */

/* Функция ввода графа */

int VvodGraf (int ms [NMAX] [NMAX])

/* ms – матрица смежности */

/* Возвращаемое значение – число вершин графа */

{ int n; /* число вершин графа */

int i, j; /* номера вершин */

puts (“\nВведите число вершин графа (<=10)”);

scanf (“%d”, &n);

/* Обнуление матрицы смежности */

for (i=0; i<n; i++)

for (j=0; j<n; j++) ms[i][j] = 0;

puts (“Введите последовательность ребер, завершив ввод ”);

puts (“нажатием Ctrl-Z”);

while (scanf(“%d %d”, &i,&j)!=EOF)

ms[i][j] = ms[j][i] = 1;

return n;

}

 

/* Главная функция */

void main()

{ int g[NMAX][ NMAX]; /* матрица смежности */

int n; /* число вершин графа */

n = VvodGraf (g); /* вызов функции ввода графа */

}

 

3. Матрица весов – квадратная матрица размерности n*n (n – число вершин), в которой элемент

mw [i][j] = вес дуги i –> j

Например, дана система дорог: вершины – города, ребра – дороги. Вес ребра – длина дороги.

 

50 45 | 0 1 2 3 4 5

------------------------

30 60 0 | 0 50 0 0 0 100

30 1 | 50 0 45 60 30 0

100 mw = 2 | 0 45 0 0 0 0

60 3 | 0 60 0 0 30 60

4 | 0 30 0 30 0 0

5 | 100 0 0 60 0 0

 

 

Рис. 20.2. Пример системы дорог и матрицы весов.

 

Описание на языке С:

#define NMAX 10 /* макс. число вершин */

int mw[NMAX][ NMAX]; /* матрица весов */

int n; /* число вершин */

 

 

4. Матрица инцидентности – это прямоугольная матрица размерности n*r (n – число вершин, r – число ребер).

Для неориентированного графа элемент матрицы:

 
 


1, если i -я вершина инцидентна j -му ребру,

mi[i][j] = 2, если j -е ребро – петля i -й вершины,

0, если i -я вершина не инцидентна j -му ребру.

 

 

| 0 1 2 3 4 5 6

1 ----------------------------------

0 2 6 0 | 1 0 0 0 0 1 0

4 1 | 1 1 1 0 1 0 0

mi = 2 | 0 1 0 0 0 0 2

3 3 | 0 0 1 1 0 0 0

5 4 | 0 0 0 1 1 1 0

 

 

Рис. 20.3. Пример графа и матрицы инцидентности.

 

 

Для орграфа элемент матрицы инцидентности:

 

-1, если j -я дуга выходит из i -й вершины j

mi[i][j] = 1, если j -я дуга входит в i -ю вершину j

2, если j -я дуга – петля i -й вершины,

0, если i -я вершина не инцидентна j -й дуге.

 

| 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

 
 


Рис. 20.4. Пример орграфа и матрицы инцидентности.

 

Описание на языке С:

#define NMAX 10 /* макс. число вершин */

#define RMAX 100 /* макс. число ребер (дуг) */

int mi[NMAX][ RMAX]; /* матрица инцидентности */

int n; /* число вершин */

int r; /*число ребер */

 

<== предыдущая лекция | следующая лекция ==>
Представление графов | Пример 20.3
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 255; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.