#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
'Programming > DS SorceCode' 카테고리의 다른 글
SrchALGraph.h ; 탐색 기능이 추가된 인접 리스트 기반 그래프 클래스 (0) | 2019.04.01 |
---|---|
SrchAMGraph : 탐색 기능이 추가된 행렬 기반 그래프 클래스 (0) | 2019.04.01 |
Node.h : 인접 리스트를 이용한 그래프를 위한 노드 클래스 (0) | 2019.04.01 |
AdjMatGraph.h : 인접 행렬을 위한 그래프 클래스 (0) | 2019.03.30 |
MaxHeap.h : 배열을 이용한 최대 힙 클래스 (0) | 2019.03.29 |