반응형
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 8 // 노드 최고 개수 8 
#define FALSE 0
#define TRUE 1
typedef struct node *node_point; //선언자  
typedef struct node
{
	int vertex; // 번호 
	node_point link;
};
node_point graph[MAX_VERTICES];
short int visited[MAX_VERTICES]; // 방문기록-배열  
typedef struct queue *queue_point;
typedef struct queue
{
	int vertex;
	queue_point link;
};
node_point createnode(int data);
void bfs (int vertex); // BFS함수 선언 
void addq(queue_point *, queue_point *, int);
int deleteq (queue_point *front); 
int main()
{
	graph[0] = createnode(1);
	graph[0]->link = createnode(2);
	graph[1] = createnode(0);
	graph[1]->link = createnode(3);
	graph[1]->link->link = createnode(4);
	graph[2] = createnode(0);
	graph[2]->link = createnode(5);
	graph[2]->link->link = createnode(6);
	graph[3] = createnode(1);
	graph[3]->link = createnode(7);
	graph[4] = createnode(1);
	graph[4]->link = createnode(7);
	graph[5] = createnode(2);
	graph[5]->link = createnode(7);
	graph[6] = createnode(2);
	graph[6]->link = createnode(7);
	graph[7] = createnode(3);
	graph[7]->link = createnode(4);
	graph[7]->link->link = createnode(5);
	graph[7]->link->link->link = createnode(6);
	printf(" : "); // 정점의 운행 순서
	bfs(0); // 0번 호출
	printf(" \n"); // 끝
}

/* 노드 생성을 위한 함수  */
node_point createnode(int data)
{
	node_point ptr;
	ptr = (node_point)malloc(sizeof(struct node)); //메모리 확보 
	ptr->vertex = data;
	ptr->link = NULL;
	return ptr;
}

void bfs (int v)
{
	node_point w;
	queue_point front, rear;
	front = rear = NULL;
	printf("V%d-> ", v);
	visited[v] = TRUE;
	addq (&front, &rear, v);
	while (front)
	{
		v = deleteq (&front);
		for (w=graph[v]; w;w=w->link)
		if (!visited[w->vertex])
		{
			printf ("V%d-> ", w->vertex);
			addq (&front, &rear, w->vertex);
			visited[w->vertex] = TRUE;
		}	
	}
}
void addq (queue_point *front, queue_point *rear, int data)
{
	queue_point temp;
	temp = (queue_point)malloc(sizeof(struct queue));
	temp->vertex = data;
	temp->link = NULL;
	if (*front)
	(*rear)->link = temp;
	else
	*front = temp;
	*rear = temp;	
}
int deleteq (queue_point *front)
{
	queue_point temp;
	int data;
	temp = *front;
	data = temp->vertex;
	*front = temp->link;
	free(temp);
	return data;
}
/*
 : V0-> V1-> V2-> V3-> V4-> V5-> V6-> V7->

--------------------------------
Process exited after 0.01723 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/	
반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

버블정렬  (0) 2019.09.11
최댓값 찾기 알고리즘  (0) 2019.09.03
행렬을 이용한 BFS (c)  (0) 2019.08.20
연결 리스트 DFS (c)  (0) 2019.08.16
그래프의 탐색  (0) 2019.08.12

+ Recent posts