본문 바로가기

Programming/DS SorceCode

AdjListGraph.h : 인접 리스트를 이용한 그래프 클래스

#pragma once

#ifndef ___AdjListGraph

#define ___AdjListGraph

//AdjListGraph.h : 인접 리스트를 이용한 그래프 클래스

#include "Node_Adj.h" //연결 리스트를 위한 노드 그래프 클래스 포함

#define MAX_VTXS 256

class AdjListGraph {

protected:

int size; //정점의 개수

char vertices[MAX_VTXS]; //정점 정보(응용에 따라 확장 필요)

Node* adj[MAX_VTXS]; //각 정점의 인접 리스트

public:

AdjListGraph() : size(0) {}

~AdjListGraph() { reset(); }

void reset(void) {

for (int i = 0; i < size; i++)

if (adj[i] != NULL) delete adj[i];

size = 0;

}

bool isEmpty() { return size == 0; }

bool isFull() { return size >= MAX_VTXS; }

char getVertex(int i) { return vertices[i]; }


void insertVertex(const char val) { //정점 삽입 연산

if (!isFull()) {

vertices[size] = val;

adj[size++] = NULL;

}

else printf("Error : 그래프 정점 개수 초과\n");

}


void insertEdge(int u, int v) { //간선 삽입 연산

adj[u] = new Node(v, adj[u]); //인접 리스트에 추가

adj[v] = new Node(u, adj[v]); //방향 그래프 ==>주석 처리함

}


void display() {

printf("%d\n", size); //정점의 개수 출력

for (int i = 0; i < size; i++) { //각 행의 정보 출력

printf("%c ", getVertex(i)); //정점의 이름 출력

for (Node* v = adj[i] ; v != NULL; v = v->getLink())

printf("  %c", getVertex(v->getId()));

//printf("%3d", v.getId());

printf("\n");

}

}

Node* adjacent(int v) { return adj[v]; }

//파일 입력 함수

void load(const char * filename) {

/* FILE * fp;

fopen_s(&fp, filename, "r");

if (fp != NULL) {

int n;

fscanf_s(fp, "%d", 80, &n); //정점의 전체 개수

for (int i = 0; i < n; i++) {

char str[80];

fscanf_s(fp, "%s", 80, str); //정점의 이름

insertVertex(str[0]); //정점 삽입

for (int j = 0; j < n; j++) {

int val;

fscanf_s(fp, "%d", 80, &val); //간선 정보

if (val != 0) //간선이 있으면

insertEdge(i, j); //간선 삽입

}

}

fclose(fp);

}

*/

}


};

#endif // !___AdjListGraph