본문 바로가기
NOTE/Algorithm

자료구조) Graph

by DevAthena 2015. 8. 25.
#include <stdio.h>
#include <stdlib.h>
 
/* 인접 행렬을 이용한 그래프 추상 데이터 타입의 구현 */
 
#define MAX_VERTICES 50
typedef struct GraphType
{
    int n;
    int adj_mat[MAX_VERTICES][MAX_VERTICES];
}GraphType;
 
//그래프 초기화
void graph_init(GraphType *g)
{
    int r, c;
    g->= 0;
    for (r = 0; r < MAX_VERTICES; r++)
        for (c = 0; c < MAX_VERTICES; c++)
            g->adj_mat[r][c] = 0;
}
 
//정점 삽입 연산
void insert_vertex(GraphType *g, int v)
{
    if (((g->n) + 1> MAX_VERTICES)
    {
        fprintf(stderr, "그래프:정점의 개수 초과");
        return;
    }
    g->n++;
}
 
//간선 삽입 연산
void insert_edge(GraphType *g, int start, int end)
{
    if (start >= g->|| end >= g->n)
    {
        fprintf(stderr, "그래프:정점 번호 오류");
        return;
    }
    g->adj_mat[start][end] = 1;
    g->adj_mat[end][start] = 1;
}
 
/* 인접 리스트를 이용한 그래프 추상 데이터 타입의 구현 */
 
#define MAX_VERTICES 50
 
typedef struct GraphNode
{
    int vertex;
    struct GraphNode *link
}GraphNode;
 
typedef struct GraphType
{
    int n;
    GraphNode *adj_list[MAX_VERTICES];
}GraphType;
 
//그래프 초기화
void graph_init(GraphType *g)
{
    int v;
    g->= 0;
    for (v = 0; v < MAX_VERTICES; v++)
        g->adj_list[v] = NULL;
}
 
//정점 삽입 연산
void insert_vertex(GraphType *g, int v)
{
    if ((g->n) + 1 > MAX_VERTICES)
    {
        fprintf(stderr, "그래프:정점의 개수 초과");
        return;
    }
    g->n++;
}
 
//간선 삽입 연산, v를 u의 인접 리스트에 삽입한다.
void insert_edge(GraphType *g, int u, int v)
{
    GraphNode *node;
    if (u >= g->|| v >= g->n)
    {
        fprintf(stderr, "그래프:정점 번호 오류");
        return;
    }
    
    node = (GraphNode *)malloc(sizeof(GraphNode));
    node->vertex = v;
    node->link = g->adj_list[u];
    g->adj_list[u] = node;
}
cs


'NOTE > Algorithm' 카테고리의 다른 글

자료구조) Binary_Tree  (0) 2015.08.25
자료구조) Tree_Traverse  (0) 2015.08.25
자료구조) QuickSort  (0) 2015.08.25
자료구조) linked_queue  (0) 2015.08.25
자료구조) linked_stack  (0) 2015.08.25