한 걸음 두 걸음

자료구조 / 인접리스트를 활용한 그래프 (C++) 본문

CSE/Data Structure

자료구조 / 인접리스트를 활용한 그래프 (C++)

언제나 변함없이 2019. 11. 13. 16:52
반응형
#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