반응형
인접행렬을 이용한 그래프 구현(1)
방향성 가중치 단순 그래프
# 인접행렬을 이용해서 표현할 수 있는 단순한 형태의 그래프.
# 배열 안의 값은 간선의 가중치를 나타낸다.
# 가중치가 없는 다중 그래프라면 배열의 값이 간선의 갯수가 된다. 다만 이러면 간선을 하나씩 추가할 수 있도록 코드가 수정될 필요가 있다.
# 아직 그래프 순회나 검색 등의 내용을 넣진 않았다
MatrixGraph.h
#pragma once
#include <iostream>
struct edge
{
bool exist;
int weight;
};
class MatrixGraph
{
int vertexCount;
int** matrix;
public:
bool AddEdge(int StartVertex, int EndVertex, int weight);
void ShowMatrix();
public:
MatrixGraph(int vertexCount);
virtual ~MatrixGraph();
};
//-------------
MatrixGraph::MatrixGraph(int Count)
{
//VertexCount로 정점을 동적할당하고 edge의 2차원 배열을 만든다.
vertexCount = Count;
matrix = new int*[vertexCount];
for (int i = 0; i < vertexCount; i++) {
matrix[i] = new int[vertexCount];
memset(matrix[i], -1, sizeof(int)*vertexCount);
}
}
bool MatrixGraph::AddEdge(int StartVertex, int EndVertex, int weight)
{
if (StartVertex >= vertexCount || StartVertex < 0 || EndVertex >= vertexCount || EndVertex < 0) {
return false;
}
matrix[StartVertex][EndVertex] = weight;
return true;
}
void MatrixGraph::ShowMatrix()
{
for (int i = 0; i < vertexCount; i++) {
for (int j = 0; j < vertexCount; j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
}
MatrixGraph::~MatrixGraph()
{
for (int i = 0; i < vertexCount; i++) {
delete[] matrix[i];
}
delete[] matrix;
}
반응형