인접 리스트로 구현 - class 선언
typedef ChainNode* ChainNodePointer;
class Graph {
private:
ChainNodePointer *HeadNodes; // first들의 배열 선언
int n; // 정점 수
bool* visited; // 방문 여부
public:
Graph (const int vertices = 0) : n(vertices)
{ HeadNodes = new ChainNodePointer[n]; };
}
연결 요소
인접 리스트 : 모든 node 1번씩 방문, O(e) + for 반복문, O(n) = O(n+e) 소요
인접 행렬 : O($n^2$) 소요
void Graph::Components(){
// graph의 연결 요소들 결정
visited = new bool[n];
for (int i=0; i<n; i++) // 미방문으로 초기화
visited[i] = false;
for(int i=0; i<n; i++){
if (!visited[i]){
DFS(i); // 하나의 요소 발견
OutputNewComponent();
}
}
delete[] visited;
}
'알고리즘 > C++' 카테고리의 다른 글
9-2. 그래프 (Graph) - 너비 우선 탐색 (Breadth First Search, BFS) (0) | 2020.07.26 |
---|---|
9-1. 그래프 (Graph) - 깊이 우선 탐색 (Depth First Search, DFS) (0) | 2020.07.26 |
8. 이진 탐색 트리 (Binary Search Tree, BST) (0) | 2020.07.25 |
7. 최대 히프 (Max Heap) (0) | 2020.07.25 |
6. 트리 (Tree) (0) | 2020.07.24 |