한 걸음 두 걸음
자료구조 / 인접리스트를 활용한 그래프 (C++) 본문
반응형
#include <cstdio>
#include <cstdlib>
const int MAX_VTXS = 256;
class Node {
protected:
int id;
Node* link;
public:
Node(int i, Node* l = NULL) : id(i), link(l) {
}
~Node() {
if (link != NULL) {
delete link;
}
}
int getId() {
return id;
}
Node* getLink() {
return link;
}
void setLink(Node* l) {
link = l;
}
};
class ListGraph {
protected:
int size; //정점의 갯수
char vertices[MAX_VTXS]; //정점의 이름
Node* adj[MAX_VTXS]; //인접행렬
public:
ListGraph() {
size = 0;
}
~ListGraph() {
reset();
}
void reset() {
size = 0;
for (int i = 0; i < size; i++) {
if (adj[i] != NULL)
delete adj[i];
size = 0;
}
}
char getVertex(int i) {
return vertices[i];
}
bool isEmpty() {
return size == 0;
}
bool isFull() {
return size >= MAX_VTXS;
}
//정점추가
void insertVertex(char name) {
if (!isFull()) {
vertices[size] = name;
adj[size++] = NULL;
}
}
//무방향 그래프 간선 추가
void insertEdge(int u, int v) {
adj[u] = new Node(v, adj[u]);
adj[v] = new Node(u, adj[v]);
}
void display() {
for (int i = 0; i < size; i++) {
printf("%c ", getVertex(i));
for (Node* v = adj[i]; v != NULL ; v = v->getLink()) {
printf(" %3c", getVertex(v->getId()));
}
printf("\n");
}
}
};
void main() {
ListGraph graph;
for (int i = 0; i < 4; i++) {
graph.insertVertex('A' + i);
}
graph.insertEdge(0, 1);
graph.insertEdge(0, 3);
graph.insertEdge(1, 2);
graph.insertEdge(1, 3);
graph.insertEdge(2, 3);
graph.display();
}
반응형
'CSE > Data Structure' 카테고리의 다른 글
C++ 원형 덱 (0) | 2019.11.06 |
---|---|
C++ 선형 큐 (0) | 2019.11.06 |
C++ 환형 큐 (0) | 2019.11.06 |
C++ 스택 (0) | 2019.11.06 |
자료구조 맵 ] Map / Collection (0) | 2019.03.27 |