#pragma once
#ifndef ___AdjMatGraph
#define ___AdjMatGraph
//AdjMatGraph.h : 인접 행렬을 위한 그래프 클래스
#include <cstdio>
#define MAX_VTXS 256 //표현 가능한 최대 정점의 개수
class AdjMatGrapgh {
protected:
int size; //정점의 개수
char vertices[MAX_VTXS]; //정점의 이름
int adj[MAX_VTXS][MAX_VTXS]; //인접 행렬
public:
AdjMatGrapgh() { reset(); }
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 reset() {
size = 0;
for (int i = 0; i < MAX_VTXS; i++)
for (int j = 0; j < MAX_VTXS; j++)
setEdge(i, j, 0);
}
//정점 삽입 연산
void insertVertex(char name) {
if (!isFull()) vertices[size++] = name;
else printf("Error : 그래프 정점 개수 초과\n");
}
//간선 삽입 연산 : 무방향 그래프의 경우임. (방향, 가중치 그래프에서는 수정)
void insertEdge(int u, int v) {
setEdge(u, v, 1);
setEdge(v, u, 1); //방향 그래프에서는 삭제됨(<u,v>만 존재)
}
//그래프 정보를 출력함(화면이나 파일에 출력)
void display(FILE *fp = stdout) {
fprintf(fp, "%d\n", size); //정점의 개수 출력
for (int i = 0; i < size; i++) { //각 행의 정보 출력
fprintf(fp, "%c ", getVertex(i)); //정점의 이름 출력
for (int j = 0; j < size; j++) //간선 정보 출력
fprintf(fp, " %3d", getEdge(i, j));
fprintf(fp, "\n");
}
}
//파일 입력 함수
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);
}
}
//파일 저장 함수
void store(const char *filename) {
FILE *fp;
fopen_s(&fp, filename, "w");
if (fp != NULL) {
display(fp);
fclose(fp);
}
}
};
#endif // !___AdjMatGraph
'Programming > DS SorceCode' 카테고리의 다른 글
AdjListGraph.h : 인접 리스트를 이용한 그래프 클래스 (0) | 2019.04.01 |
---|---|
Node.h : 인접 리스트를 이용한 그래프를 위한 노드 클래스 (0) | 2019.04.01 |
MaxHeap.h : 배열을 이용한 최대 힙 클래스 (0) | 2019.03.29 |
HeapNode : 힙에 저장할 노드 클래스 (0) | 2019.03.29 |
BinSrchTree_Dictionary.h : 사전 클래스를 위한 이진 탐색 트리 클래스 #오류가 있음 (0) | 2019.03.29 |