Professional Documents
Culture Documents
Disktretka
Disktretka
Отчет
по лабораторной работе Nr.1.
по Дискретной математике
Кишинев – 2023
Цель работы:
1. Освоение и изучение способов задания графов: матрица
инцидентности, матрица смежности, список смежности.
2. Разработка процедур преобразования видов хранения графов с
выдачей результатов на дисплей.
Задание
1. Разработать процедуры ввода графа в виде матрицы
инцидентности, матрицы смежности и списка смежности с
возможностью корректировки введенных данных.
2.Разработать процедуры преобразования различных форм
хранения графа:
-- из матрицы смежности в список смежности и обратно;
-- из матрицы инцидентности в список смежности и обратно;
3. Используя указанные выше процедуры, получить
программу, выполняющую следующие функции:
--ввод графа в любой из трех форм представления (по требованию
пользователя);
--хранение введенного графа в памяти ЭВМ в виде списка
смежности;
-- вывод информации о графе в любом из трех видов (также по
требованию пользователя) на дисплей;
Код программы:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
graph->adjacencyList = malloc(sizeof(tNode));
for (int i = 1; i <= vertices; i++)
{
graph->adjacencyList[i] = NULL;
}
return graph;
}
graph->incidenceMatrix[jincrement][i] = -1;
graph->incidenceMatrix[jincrement][convert->vertex] = 1;
}
else if (graph->incidenceMatrix[i] == graph-
>incidenceMatrix[convert->vertex])
{
graph->incidenceMatrix[jincrement][i] = 0;
graph->incidenceMatrix[jincrement][convert->vertex] = 2;
}
}
convert = convert->next;
jincrement++;
}
}
}
printf("Choose an option:\n");
printf("1.Add and print adjaceent list.\n");
printf("2.Add and print adjacent Matrix.\n");
printf("3.Add and print incidence Matrix.\n");
int option;
scanf("%d", &option);
do
{
switch (option)
{
case 1:
printf("Enter edges in format from start point to end point:\n");
for (int i = 0; i < edges; i++)
{
int start, end;
scanf("%d %d", &start, &end);
addEdgeToList(graph, start, end);
}
printAdjacencyList(graph);
step:
printf("Choose next action:\n");
printf("1.Convert adjacency List into adjacency Matrix.\n");
printf("2.Convert adjacency List into incidence Matrix.\n");
printf("3.Edit input.\n");
printf("4.Enter '0' to stop\n");
int option1;
scanf("%d", &option1);
switch (option1)
{
case 1:
convertListToAdjMatrix(graph);
printAdjacencyMatrix(graph);
break;
case 2:
convertListToIncMatrix(graph);
printIncidenceMatrix(graph);
break;
case 3:
dataCorrection1(graph, edges);
printAdjacencyList(graph);
goto step;
break;
case 0:
return 0;
}
break;
case 2:
printf("Enter edges in format from start point to end point:\n");
for (int i = 0; i < edges; i++)
{
int start, end;
scanf("%d %d", &start, &end);
addEdgeToAdjacencyMatrix(graph, start, end);
}
printAdjacencyMatrix(graph);
step2:
printf("Choose next action:\n");
printf("1.Convert adjacency Matrix into adjacency List.\n");
printf("2.Edit input\n");
printf("3.Enter '0' to stop\n");
int option2;
scanf("%d", &option2);
switch (option2)
{
case 1:
convertAdjacencyMatrixToList(graph);
printAdjacencyList(graph);
break;
case 2:
dataCorrection2(graph, edges);
printAdjacencyMatrix(graph);
goto step2;
break;
case 0:
return 0;
}
break;
case 3:
printf("Enter edges in format from start point to end point:\n");
for (int i = 0; i < edges; i++)
{
int start, end;
scanf("%d %d", &start, &end);
addEdgeToIncidenceMatrix(graph, start, end);
}
printIncidenceMatrix(graph);
// step3:
printf("Choose next action:\n");
printf("1.Convert incedence Matrix into adjacency List.\n");
printf("2.Edit input\n");
printf("3.Enter '0' to stop\n");
int option3;
scanf("%d", &option3);
switch (option3)
{
case 1:
convertIncedenceMatrixToList(graph);
printAdjacencyList(graph);
break;
case 2:
dataCorrection3(graph, edges);
printIncidenceMatrix(graph);
// goto step3;
break;
case 0:
return 0;
}
break;
}
} while (option != 0);
return 0;
}
///Пример ввода:
Choose an option: