-
ArrayListGraph 기능 메서드)
그래프에서 사용하는 기능 메서드를 구현한다.
ArrayListGraph.cpp
/// <summary> /// 지정된 인덱스의 노드에 진입하는 차수를 반환한다. /// </summary> /// <param name="num">노드의 번호</param> size_t ArrayListGraph::GetDegreeIn(int num) { if (!ContainsNode(num)) { return -1; } int count{ 0 }; GraphHeader* curHead{ m_graphHeaders }; while (curHead != nullptr) { GraphNode* curNode{ curHead->m_data }; while (curNode != nullptr) { if (curNode->m_idx == num) { count++; } curNode = curNode->m_next; } curHead = curHead->m_next; } return count; } /// <summary> /// 지정된 인덱스의 노드에서 진출하는 차수를 반환한다. /// </summary> /// <param name="num">노드의 번호</param> size_t ArrayListGraph::GetDegreeOut(int num) { GraphHeader* targetHeader{ GetTargetHeader(num) }; if (targetHeader == nullptr) { return -1; } int count{ 0 }; GraphNode* targetNode = targetHeader->m_data; while (targetNode != nullptr) { targetNode = targetNode->m_next; count++; } return count; }
main.cpp
#include <iostream> #include "Graph/ArrayListGraph.h" // 생성한 자료구조 테스트용 메인 int main() { ArrayListGraph graph; graph.InsertNode(1); graph.InsertNode(2); graph.InsertNode(3); graph.InsertNode(4); graph.InsertEdge(1, 2); graph.InsertEdge(1, 4); graph.InsertEdge(2, 3); graph.InsertEdge(2, 4); graph.InsertEdge(3, 4); graph.PrintInfo(); std::cout << graph.GetDegreeIn(1) << ' ' << graph.GetDegreeOut(1) << '\n'; graph.RemoveEdge(1, 4); graph.PrintInfo(); std::cout << graph.GetDegreeIn(1) << ' ' << graph.GetDegreeOut(1) << '\n'; graph.RemoveNode(2); graph.PrintInfo(); }
실행결과
---------------------- Count: 4 4 : NULL 3 : 4 2 : 4 3 1 : 4 2 ---------------------- 0 2 ---------------------- Count: 4 4 : NULL 3 : 4 2 : 4 3 1 : 2 ---------------------- 0 1 ---------------------- Count: 3 4 : NULL 3 : 4 1 : NULL ----------------------