#include <stdio.h>
#include <stdlib.h> // exit 함수를 사용하기 위해 추가
#define MAX_VERTEX 50
typedef struct graphType {
int n;
int adjMatrix[MAX_VERTEX][MAX_VERTEX];
} graphType;
void createGraph(graphType* g) {
int i, j;
g->n = 0;
for (i = 0; i < MAX_VERTEX; i++) {
for (j = 0; j < MAX_VERTEX; j++) {
g->adjMatrix[i][j] = 0;
}
}
}
void insertVertex(graphType* g, int v) {
if (((g->n) + 1) > MAX_VERTEX) {
printf("\n그래프 정점의 개수를 초과했습니다."); return;
}
g->n++;
}
void insertEdge(graphType* g, int u, int v) {
if (u < 0 || u >= g->n || v < 0 || v >= g->n) {
printf("\n간선 삽입 오류: 정점 번호가 범위를 벗어났습니다."); return;
}
g->adjMatrix[u][v] = 1;
g->adjMatrix[v][u] = 1; // 무방향 그래프의 경우
}
void printAdjMatrix(graphType* g) {
int i, j;
for (i = 0; i < g->n; i++) {
for (j = 0; j < g->n; j++) {
printf(" %d", g
->adjMatrix
[i
][j
]); }
}
}
int main() {
graphType g;
createGraph(&g);
insertVertex(&g, 0);
insertVertex(&g, 1);
insertVertex(&g, 2);
insertEdge(&g, 0, 1);
insertEdge(&g, 1, 2);
insertEdge(&g, 0, 2);
printAdjMatrix(&g);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4gLy8gZXhpdCDtlajsiJjrpbwg7IKs7Jqp7ZWY6riwIOychO2VtCDstpTqsIAKCiNkZWZpbmUgTUFYX1ZFUlRFWCA1MAoKdHlwZWRlZiBzdHJ1Y3QgZ3JhcGhUeXBlIHsKICAgIGludCBuOwogICAgaW50IGFkak1hdHJpeFtNQVhfVkVSVEVYXVtNQVhfVkVSVEVYXTsKfSBncmFwaFR5cGU7Cgp2b2lkIGNyZWF0ZUdyYXBoKGdyYXBoVHlwZSogZykgewogICAgaW50IGksIGo7CiAgICBnLT5uID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfVkVSVEVYOyBpKyspIHsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUFYX1ZFUlRFWDsgaisrKSB7CiAgICAgICAgICAgIGctPmFkak1hdHJpeFtpXVtqXSA9IDA7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGluc2VydFZlcnRleChncmFwaFR5cGUqIGcsIGludCB2KSB7CiAgICBpZiAoKChnLT5uKSArIDEpID4gTUFYX1ZFUlRFWCkgewogICAgICAgIHByaW50ZigiXG7qt7jrnpjtlIQg7KCV7KCQ7J2YIOqwnOyImOulvCDstIjqs7ztlojsirXri4jri6QuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZy0+bisrOwp9Cgp2b2lkIGluc2VydEVkZ2UoZ3JhcGhUeXBlKiBnLCBpbnQgdSwgaW50IHYpIHsKICAgIGlmICh1IDwgMCB8fCB1ID49IGctPm4gfHwgdiA8IDAgfHwgdiA+PSBnLT5uKSB7CiAgICAgICAgcHJpbnRmKCJcbuqwhOyEoCDsgr3snoUg7Jik66WYOiDsoJXsoJAg67KI7Zi46rCAIOuylOychOulvCDrspfslrTrgqzsirXri4jri6QuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZy0+YWRqTWF0cml4W3VdW3ZdID0gMTsKICAgIGctPmFkak1hdHJpeFt2XVt1XSA9IDE7IC8vIOustOuwqe2WpSDqt7jrnpjtlITsnZgg6rK97JqwCn0KCnZvaWQgcHJpbnRBZGpNYXRyaXgoZ3JhcGhUeXBlKiBnKSB7CiAgICBpbnQgaSwgajsKICAgIHByaW50ZigiXG7snbjsoJEg7ZaJ66CsOlxuIik7CiAgICBmb3IgKGkgPSAwOyBpIDwgZy0+bjsgaSsrKSB7CiAgICAgICAgZm9yIChqID0gMDsgaiA8IGctPm47IGorKykgewogICAgICAgICAgICBwcmludGYoIiAlZCIsIGctPmFkak1hdHJpeFtpXVtqXSk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBncmFwaFR5cGUgZzsKICAgIGNyZWF0ZUdyYXBoKCZnKTsKCiAgICBpbnNlcnRWZXJ0ZXgoJmcsIDApOwogICAgaW5zZXJ0VmVydGV4KCZnLCAxKTsKICAgIGluc2VydFZlcnRleCgmZywgMik7CgogICAgaW5zZXJ0RWRnZSgmZywgMCwgMSk7CiAgICBpbnNlcnRFZGdlKCZnLCAxLCAyKTsKICAgIGluc2VydEVkZ2UoJmcsIDAsIDIpOwoKICAgIHByaW50QWRqTWF0cml4KCZnKTsKCiAgICByZXR1cm4gMDsKfQo=