한 걸음 두 걸음

C++ 2차원배열 무방향그래프 본문

Language/C++

C++ 2차원배열 무방향그래프

언제나 변함없이 2019. 11. 13. 16:53
반응형
#include <cstdio>
#include <cstdlib>
const int MAX_VTXS = 256;


class Graph {
private:
    int size; //정점의 갯수
    char vertices[MAX_VTXS]; //정점의 이름
    int adj[MAX_VTXS][MAX_VTXS]; //인접행렬

public:
    Graph() {
        reset();
    }
    void reset() {
        size = 0;
        for (int i = 0; i < MAX_VTXS; i++) {
            for (int j = 0; j < MAX_VTXS; j++) {
                setEdge(i, j, 0);
            }
        }
    }
    char getVertex(int i) {
        return vertices[i];
    }
    //정점의 연결여부 확인
    int getEdge(int i , int j) {
        return adj[i][j];
    }
    void setEdge(int i, int j, int val) {
        adj[i][j] = val;
    }
    bool isEmpty() {
        return size == 0;
    }
    bool isFull() {
        return size >= MAX_VTXS;
    }
    //정점추가
    void insertVertex(char name) {
        if (!isFull())
            vertices[size++] = name;
    }
    //무방향 그래프 간선 추가
    void insertEdge(int u, int v) {
        setEdge(u, v, 1);
        setEdge(v, u, 1);
    }
    void display() {
        for (int i = 0; i < size; i++) {
            printf("%c  ", getVertex(i));
            for (int j = 0; j < size; j++) {
                printf(" %3d", getEdge(i, j));
            }
            printf("\n");
        }
    }
};

void main() {
    Graph 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();


}

반응형