Академический Документы
Профессиональный Документы
Культура Документы
REPUBLICII MOLDOVA
RAPORT
Lucrare de laborator nr. 1
la cursul „Matematica discretă”
Tema: Хранение графов в памяти ЭВМ.
Chișinău 2023
Введение:
Тема: Хранение графов в памяти ЭВМ.
Цель работы:
1. Освоение и изучение способов задания графов: матрица инцидентности,
матрица смежности, список смежности.
2. Разработка процедур преобразования видов хранения графов с выдачей
результатов на дисплей.
Задание
1. Разработать процедуры ввода графа в виде матрицы
инцидентности, матрицы смежности и списка смежности с возможностью
корректировки введённых данных.
2. Разработать процедуры преобразования различных форм
хранения графа:
Теория:
Матрица смежности - это вид представления графа в виде матрицы, когда пересечение
столбцов и строк задаёт дуги. Используя матрицу смежности, можно задать вес дуг и
ориентацию. Каждая строка и столбец матрицы соответствуют вершинам, номер
строки соответствует вершине, из которой выходит дуга, а номер столбца - в какую
входит дуга.
Выполнение(LISTING):
#include <iostream>
#include <vector>
using namespace std;
void MS_MI(int **ms, int n, int m, int check);
void SS_MS(vector<int> *ss, int n, int m, int check) {
int **ms = new int *[n];
for (int i = 0; i < n; i++) { ms[i] = new int[n]; }
for (int i = 0; i < n; i++) {
for (auto it = ss[i].begin(); it != ss[i].end(); it++) {
if (i == ((*it) - 1)) { ms[i][*it - 1] = 1; }
else { ms[i][*it - 1] = 1; }
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << ms[i][j] << ' ';
}
cout << "\n";
}
cout << "\n";
check++;
if (check < 3) { MS_MI(ms, n, m, check); }
}
void MI_SS(int **mi, int n, int m, int check){
vector<int> ss[n];
int k=-1;
int l=-1;
int j= 0;
for(int i=0; i<m; i++){
for(j=0; j<n; j++){
if(mi[i][j]==-1){k=j;}
else if(mi[i][j]==1){l=j;}
else if(mi[i][j]==2){
l=j;
k=j;
}
}
}
if(k>-1){
ss[k].push_back(l+1);
k=-1;
j=-1;
}
cout << "\n";
for(int i=0; i<n; i++){
cout << "index " << i+1 << ": ";
for(auto it = ss[i].begin(); it != ss[i].end(); it++){
cout << *it << ' ';
}
cout << "\n";
}
cout << "\n";
check++;
if(check<3){SS_MS(ss, n, m, check);}
}
void MS_MI(int **ms, int n, int m, int check){
int **mi = new int*[m];
for(int i=0; i<m; i++){ mi[i] = new int[n]; }
int k=0;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(ms[i][j]==1 && i!=j) {
mi[k][i] = -1;
mi[k][j] = 1;
k++;
}
if(ms[i][j]==2 || (ms[i][j]==1 && i==j)){
mi[k][j]=2;
k++;
}
}
} cout << "\n";
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
cout << mi[i][j] << ' ';
}
cout << "\n";
}
check++;
if(check<3){MI_SS(mi, n, m, check);}
}
void intnumMS(){
int n, m;
cout << "Enter number of vertices(kolichestvo VERSHIN): "; cin >> n; cout << "\n";
cout << "Enter number of ribs(kolichestvo REBER): "; cin >> m; cout << "\n";
int **ms = new int*[n];
for(int i=0; i<n; i++){ ms[i] = new int[n];}
cout << "Please enter data: ";
for(int i=0; i<n;i++){
for(int j=0; j<n; j++){
cin >> ms[i][j];
}
}
for(int i=0; i<n;i++){
cout << "\n";
for(int j=0; j<n; j++){
cout << ms[i][j] << ' ';
}
}
cout << "\n";
int ch = 1;
MS_MI(ms, n, m, ch);
}
void intnumMI(){
int n, m;
cout << "Enter number of vertices(kolichestvo VERSHIN): "; cin >> n; cout << "\n";
cout << "Enter number of ribs(kolichestvo REBER): "; cin >> m; cout << "\n";
int **mi = new int*[m];
for(int i=0; i<m; i++){ mi[i] = new int[n]; }
int main(){
int intnum;
cout << "Press 1, if you need to input Adjacency Matrix(MATRICA SMEJNOSTI) : "
<< "\n";
cout << "Press 2, if you need to input Incident Matrix(MATRICA INCIDENTNOSTI): "
<< "\n";
cout << "Press 3, if you need to input Adjacency List(SPISOK SMEJNOSTI): " << "\n";
cin >> intnum;
switch(intnum){
case 1: intnumMS();
case 2: intnumMI();
case 3: intnumSS();
}
}
Контрольные вопросы
Вывод:
Выполняя эту лабораторную работу я ознакомилась с представлением графов
на языке программирования С++. Научилась их вводить в разных форматах:
матрица смежности, матрица инцидентности, список смежности, так же
выводить их на экран. Обрела навык написания функции для перевода графов
из одного формата в другой, по выбору пользователя. Для выполнения
данной лабораторной работы было необходимо ознакомиться с графами и
синтаксисом, использованным в дискретной математике.