연재 완료/자료구조 이론

23. 그래프의 구현(2) - 인접행렬을 이용한 방향성 가중치 단순 그래프

라이피 (Lypi) 2019. 1. 4. 05:34
반응형

인접행렬을 이용한 그래프 구현(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;
}

반응형