일지
자료구조...78
niamdank
2021. 4. 20. 11:12
ArrayGraph 삭제 메서드)
노드와 에지를 삭제하는 메서드를 구현한다.
ArrayGraph.cpp
/// <summary>
/// ArrayGraph에서 지정된 인덱스의 노드를 제거한다.
/// </summary>
/// <param name="value">제거할 값</param>
void ArrayGraph::RemoveNode(int index)
{
if (index < 0 || index >= m_nodeCount)
{
return;
}
for (int i = index; i < m_nodeCount - 1; i++)
{
for (int j = 0; j < m_nodeCount; j++)
{
m_graph[i][j] = m_graph[i + 1][j];
}
for (int j = 0; j < m_nodeCount; j++)
{
m_graph[j][i] = m_graph[j][i + 1];
}
}
for (int i = 0; i < m_nodeCount; i++)
{
m_graph[i][m_nodeCount - 1] = 0;
m_graph[m_nodeCount - 1][i] = 0;
}
m_nodeCount--;
}
/// <summary>
/// ArrayGraph에서 from -> to 인 간선을 제거한다.
/// </summary>
/// <param name="from">시작 노드</param>
/// <param name="to">끝 노드</param>
void ArrayGraph::RemoveEdge(int from, int to)
{
if (from < 0 || from >= m_nodeCount || to < 0 || to >= m_nodeCount)
{
return;
}
if (m_graph[from][to] > 0)
{
m_graph[from][to]--;
}
}
/// <summary>
/// ArrayGraph의 모든 노드 및 간선을 제거한다.
/// </summary>
void ArrayGraph::Clear()
{
m_nodeCount = 0;
for (size_t i = 0; i < m_nodeCapacity; i++)
{
std::fill_n(m_graph[i], m_nodeCapacity, 0);
}
}
main.cpp
#include <iostream>
#include "Graph/ArrayGraph.h"
// 생성한 자료구조 테스트용 메인
int main()
{
ArrayGraph graph;
graph.InsertNode();
graph.InsertNode();
graph.InsertNode();
graph.InsertNode();
graph.InsertEdge(0, 1);
graph.InsertEdge(0, 3);
graph.InsertEdge(1, 1);
graph.InsertEdge(1, 2);
graph.InsertEdge(1, 3);
graph.InsertEdge(2, 0);
graph.InsertEdge(2, 3);
graph.InsertEdge(3, 0);
graph.PrintInfo();
graph.RemoveEdge(3, 0);
graph.PrintInfo();
graph.RemoveNode(1);
graph.PrintInfo();
graph.Clear();
graph.PrintInfo();
}
실행결과
----------------------
Capacity: 5
Count: 4
0 1 0 1 0
0 1 1 1 0
1 0 0 1 0
1 0 0 0 0
0 0 0 0 0
----------------------
----------------------
Capacity: 5
Count: 4
0 1 0 1 0
0 1 1 1 0
1 0 0 1 0
0 0 0 0 0
0 0 0 0 0
----------------------
----------------------
Capacity: 5
Count: 3
0 0 1 0 0
1 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
----------------------
----------------------
Capacity: 5
Count: 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
----------------------