Вы находитесь на странице: 1из 7

Технический Университет Молдовы

Кафедра Информационных Технологий

Отчет
по лабораторной работе № 1

Тема: Хранение графов в памяти ЭВМ.

Выполнила:
Проверила:

Кишинев 2017

1
2
Цель работы: 1. Освоение и изучение использования структур данных
– двухмерных матриц и связных списков – для различных способов задания
графов : с помощью матрицы инцидентности, матрицы смежности и списков
смежности.

2. Использование процедур преобразования информации из


списковых структуры в матричные и обратно с выдачей результатов на
дисплей.

Способы задания графа:


1)Матрица инцидентности — одна из форм представления графа, в которой
указываются связи между инцидентными элементами графа (ребро(дуга) и
вершина). Столбцы матрицы соответствуют ребрам, строки — вершинам.
Ненулевое значение в ячейке матрицы указывает связь между вершиной и
ребром (их инцидентность).
1 – конец пути
0 – если пути нет
-1 – если начало пути

2)Матрица смежности графа G с конечным числом вершин


n (пронумерованных числами от 1 до n) — это квадратная
матрица A размера n, в которой значение элемента aij равно числу рёбер из i-й
вершины графа в j-ю вершину.
Иногда, особенно в случае неориентированного графа, петля (ребро из i-й
вершины в саму себя) считается за два ребра, то есть значение диагонального
элемента aii в этом случае равно удвоенному числу петель вокруг i-й
вершины.

3)Список рёбер — это тип представления графа, подразумевающий, что


каждое ребро представляется двумя числами — номерами вершин этого
ребра.

Граф
Список смежности:
1-2,3,5,0
2-2,4,5,0
3-2,3,0
4-3,5,0
5-2,3,0
6-0

Код программы:
#include <stdio.h>
#include<conio.h>

int Mat_int[6][6]={0}, Mat_smej[6] [6]={0}, Spisok[6][6]={0};


int option, Kol_ver, Kol_sv;
int i,j,m,n;

int main()
{
while(1)
{
system("cls");
printf("1.Vvod matritsi intidentnosti.\n2.Vivod matritsi intidentnosti.\n3.Vivod matritsi
smejnosti.\n4.Vivod spiska smejnosti.\n5.Vihod iz programmi.\n");
scanf("%d",&option);
if(option==1)
{
printf("\nVvedite kol-vo vershin: ");
scanf("%d",&Kol_ver);
printf("\nVvedite kol-vo sveazei: ");
scanf("%d",&Kol_sv);
printf("\nMatritsa intidentnosti:\n");
for(i=0;i<Kol_sv;i++)
{
for(j=0;j<Kol_ver;j++)
{
scanf("%d",&Mat_int[i][j]);
}
}
}
if(option==2)
{
printf("\nMatritsa intidentnosti:\n");
for(i=0;i<Kol_sv;i++)
{
printf("\n");
for(j=0;j<Kol_ver;j++)
{
printf(" %d",Mat_int[i][j]);
}
}
getch();
}
if(option==3)
{
printf("\nMatritsa smejnosti:\n");
for(i=0;i<Kol_sv;i++)
{
for(j=0;j<Kol_ver;j++)
{
if(Mat_int[i][j]==-1)
{
m=j;
}
if(Mat_int[i][j]==1)
{
n=j;
}
if(Mat_int[i][j]==2)
{
m=j;
n=j;
}
}
Mat_smej[m][n]=1;
}
for(m=0;m<Kol_ver;m++)
{
printf("\n");
for(n=0;n<Kol_ver;n++)
{
printf("%d ",Mat_smej[m][n]);
}
}
getch();
}
if(option==4)
{
printf("\nSpisok smejnosti:\n");
for(m=0;m<Kol_ver;m++)
{
printf("%d: ",m+1);
for(n=0;n<Kol_ver;n++)
{
if(Mat_smej[m][n]==1)
printf("%d",n+1);
}
printf("0\n");
}
getch();
}
if(option==5)
{
return(0);
}
}
}

Вывод: На данной лабораторной работе я реализовала способы хранения


графов в памяти ЭВМ такие, как: матрица инцидентности, матрица
смежности и список рёбер. Программа проработала без ошибок, данные
совпадают с вычислениями вручную, что свидетельствует о том, что
программа работает правильно.