한 걸음 두 걸음
C++ 2차원배열 무방향그래프 본문
반응형
#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();
}
반응형