#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX 10
typedef struct GraphNode{
int vertex;
struct GraphNode *link;
}GraphNode;
typedef struct GraphType
{
int n; // 정점의 갯수
GraphNode *adj_list[MAX_VERTEX]; // 구조체 그래프노드에 대한 포인터들의 배열 > 인접리스트를 이용한 그래프 구현
}GraphType;
void InitGraph(GraphType *g)
{
int v;
g->n=0;
for(v=0;v<MAX_VERTEX;v++)
g->adj_list[v]=NULL;
}
void InsertVertex(GraphType *g,int v)
{
if((g->n)+1 > MAX_VERTEX)
{
printf("정점 갯수 초과\n");
exit(-1);
}
g->n++;
}
void InsertEdge(GraphType *g,int u,int v) // u에서 v로 향하는 edge 만들기
{
GraphNode *node;
if(u >= g->n || v >= g->n)
{
printf("잘못된 정점 입력\n");
exit(-1);
}
node=(GraphNode*)malloc(sizeof(GraphNode));
node->vertex=v;
node->link = g->adj_list[u];
g->adj_list[u]=node;
}
그다음부턴 메인!
책에서 보고 이상하다 싶어서 구글링해봤는데 책이랑 똑같이 나오길래 질문햇어여ㅜ
네.. 소스 살펴봤는데요. GraphType 안에 GraphNode *adj_list[MAX_VERTEX]로 이미 최대 vertex크기의 배열로 정적으로 구성되어 있기 때문에이미 0번부터 MAX_VERTEX-1번까지의 Vertex가 암묵적으로 있다고 가정한 코드입니다.
그렇게 암묵적으로 존재하는 vertex간에 edge를 연결해주는 InsertEdge는 의미있는 함수이지만 InsertVertex함수는 아무 의미가 없는걸로 보여지네요.
굳이 graph의 사이즈를 업데이트하기 위해서 InsertVertex함수를 만들었다면 stop77님이 말씀하신대로 중복된 index값에 대해서는 g->n을 증가시키지 않는것이 맞습니다.
농부 // 감사합니다ㅠㅜ