
Как построить матрицу инциденций на C++?


Ответы на вопрос

Ответ: вот готовый код
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
struct myStruct{
char temp[5];
int v1;
int v2;
};
int main()
{
char filename[50];
ifstream inFile;
cout << "Enter the directory of data file:\n";
cin.getline(filename, 50);
inFile.open(filename);
if (!inFile.is_open())
{
cout << "Can't open the file. Terminating\n";
exit(EXIT_FAILURE);
}
char a[5], b[5];
int n = 0;
int m = 0;
inFile >> a >> b >> n >> m;
cout << "Number of vertexes is " << n << endl;
cout << "Number of edges is " << m << endl;
myStruct edge[2100];
int i = 0;
while (!inFile.eof())
{
inFile >> edge[i].temp >> edge[i].v1 >> edge[i].v2;
i++;
}
for (int j = 0; j < m; j++)
{
cout << edge[i].temp << " " << edge[i].v1 << " " << edge[i].v2 << " /n";
j++;
}
inFile.close();
system("pause");
}



Ответ:
Построить матрицу инцидентности и смежности.
Сформировать множество вершин, из которых исходят ребра заданной стоимости.



Для построения матрицы инциденций в C++, вы можете использовать двумерный массив (например, вектор векторов) или структуру данных, представляющую граф. В данном ответе я представлю вам пример использования вектора векторов для создания матрицы инциденций для ориентированного графа.
Предположим, у вас есть ориентированный граф с N вершинами и M рёбрами. Матрица инциденций будет иметь размерность N x M, где N - количество вершин, а M - количество рёбер. Каждая строка матрицы будет представлять вершину, а каждый столбец - ребро. Значения в матрице будут 0, если вершина не инцидентен ребру, 1, если вершина начальная для ребра, и -1, если вершина конечная для ребра.
Пример кода на C++, который создаёт матрицу инциденций для ориентированного графа:
cpp#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, M; // Количество вершин и рёбер
cin >> N >> M;
vector<vector<int>> incidenceMatrix(N, vector<int>(M, 0));
for (int i = 0; i < M; i++) {
int startVertex, endVertex;
cin >> startVertex >> endVertex;
// Заполняем матрицу инциденций
incidenceMatrix[startVertex][i] = 1;
incidenceMatrix[endVertex][i] = -1;
}
// Вывод матрицы инциденций
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cout << incidenceMatrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
Этот код сначала считывает количество вершин (N) и рёбер (M), затем создаёт матрицу инциденций и заполняет её значениями в соответствии с введёнными рёбрами.


Похожие вопросы


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili