#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAX_VERTICES 50
#define MAX_QUEUE_SIZE 100
// ---- 큐 소스코드 시작 -------------------------------------------------------
typedef int element;
typedef struct {
element queue[MAX_QUEUE_SIZE];
int front, rear;
} QueueType;
void error(char *message)
{
fprintf(stderr,"%s\n",message);
exit(1);
}
// 초기화 함수
void init(QueueType *q)
{
q->front = q->rear = 0;
}
// 공백 상태 검출 함수
int is_empty(QueueType *q)
{
return (q->front == q->rear);
}
// 포화 상태 검출 함수
int is_full(QueueType *q)
{
return ((q->rear+1)%MAX_QUEUE_SIZE == q->front);
}
// 삽입 함수
void enqueue(QueueType *q, element item)
{
if( is_full(q) )
error("큐가 포화상태입니다");
q->rear = (q->rear+1) % MAX_QUEUE_SIZE;
q->queue[q->rear] = item;
}
// 삭제 함수
element dequeue(QueueType *q)
{
if( is_empty(q) )
error("큐가 공백상태입니다");
q->front = (q->front+1) % MAX_QUEUE_SIZE;
return q->queue[q->front];
}
// 삭제 함수
element peek(QueueType *q)
{
if( is_empty(q) )
error("큐가 공백상태입니다");
return q->queue[(q->front+1) % MAX_QUEUE_SIZE];
}
// ---- 큐 소스코드 끝 -------------------------------------------------------
// ---- 인접 리스트 그래프 소스코드 시작 ------------------------------------
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->n=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->n || 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;
}
// ---- 인접 리스트 그래프 소스코드 끝 ------------------------------------
int visited[MAX_VERTICES];
// 인접 리스트로 표현된 그래프에 대한 너비 우선 탐색
void bfs_list(GraphType *g, int v)
{
// ...
}
int main()
{
int i;
GraphType g;
graph_init(&g);
// 인접 리스트 생성
for(i=0;i<4;i++)
insert_vertex(&g, i);
insert_edge(&g,0,1);
insert_edge(&g,1,0);
insert_edge(&g,0,3);
insert_edge(&g,3,0);
insert_edge(&g,1,2);
insert_edge(&g,2,1);
insert_edge(&g,1,3);
insert_edge(&g,3,1);
insert_edge(&g,2,3);
insert_edge(&g,3,2);
// 너비 우선 탐색
bfs_list(&g, 0);
system("pause");
return 0;
}
'이전것 > 개발' 카테고리의 다른 글
Dijkstra's algorithm (0) | 2014.11.11 |
---|---|
kruskal Greedy Method (0) | 2014.11.06 |
너비 우선 탬색 (0) | 2014.10.28 |
TOTAL SORT F1 (0) | 2014.10.10 |
Total_Sort (0) | 2014.10.08 |