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