|
error("큐가 공백상태입니다");
error라는 함수 코딩이 없는데요?
너무 배고파 님이 쓰신 글 :
: 컴공과 대학생인데요.
:
: 그래프를 구현해서 깊이우선탐색 너비우선탐색 소스를 만들어서 실행했습니다.
:
: 그런데 실행하면 이런 메세지가 뜨더군요.
:
: [Linker Error] Error: Unresolved external '_error' referenced from C:\DOCUMENTS AND SETTINGS\김진우\MY DOCUMENTS\BORLAND STUDIO PROJECTS\DEBUG_BUILD\UNIT1.OBJ
:
: 제가 볼때 마지막에 있는 bfs함수때문에 저런 메세지가 뜨는거 같은데 왜 뜨는지 알수가 없습니다. 비주얼c++은 안깔려있어서 아직 테스트를 못해봤네요.
:
: 왜 이런 에러가 뜨는지 알고싶습니다. 소스자체 문법은 별 문제 없는거 같은데요.
:
: #include <stdio.h>
: #include <stdlib.h>
: #include <conio.h>
: #define NUM 8
: #define MAX 10
:
:
: typedef struct node node;
: typedef node* nodeptr;
: typedef int element;
:
: typedef struct {
: element queue[MAX];
: int front, rear;
: } QueueType;
:
: struct node {
: int vertex; // 정점 표현
: nodeptr link;
: };
:
: typedef struct {
: int v1;
: int v2;
: } edge;
:
: int visited[NUM] = {0};
: int start = 1;
: int i;
: int main()
: {
: nodeptr headers[NUM];
: void createGraph(nodeptr headers[]);
: void insertEdge(nodeptr headers[], edge e);
: void printGraph(nodeptr headers[]);
: void dfs(nodeptr headers[], int vertex);
: void bfs(nodeptr headers[], int vertex);
:
:
: createGraph(headers); // 그래프를 생성한다.
: printGraph(headers);// 그래프를 출력한다.
: printf("Graph traversal by depth first search\n");
: dfs(headers, start); // 깊이 우선순서에 의해서
: bfs(headers, start);
: getch();
: }
:
: void createGraph(nodeptr headers[])
: {
: edge e;
:
: void initGraph(nodeptr []);
: edge createEdge(void);
: void insertEdge(nodeptr[], edge);
: int isMoreEdge(void);
:
: initGraph(headers); // 그래프를 초기화한다.
:
: // 그래프에 간선을 추가한다
: while (isMoreEdge()) { // 추가할 간선이 존재하면,
: e = createEdge(); // 간선을 생성하고,
: insertEdge(headers, e); // 간선을 그래프에 추가한다.
: }
: }
:
: int isMoreEdge()
: {
: char ans, dummy;
:
: printf("\n");
: printf("Do you want to insert a edge? (y/N): ");
: ans = getchar();
: dummy = getchar();
:
: // 사용자가 y나 Y를 입력하면 1을 반환, 그렇지 않으면 0을 반환
:
: if (ans == 'y' || ans == 'Y')
: return 1;
: else
: return 0;
: }
:
:
:
: void initGraph(nodeptr headers[])
: {
: int i;
: for (i=0; i<NUM; i++)
: {
: headers[i] = NULL;
: }
: }
:
: edge createEdge()
: {
: int v1, v2;
: char dummy;
: edge e;
:
: // 시작 정점을 읽어들인다
:
: printf("\n");
: printf("Enter a starting vertex: ");
: scanf("%d", &v1);
:
: // 끝 정점을 읽어들인다.
:
: printf("Enter an ending vertex: ");
: scanf("%d", &v2);
: dummy = getchar();
:
:
: // 간선을 생성한다.
:
: e.v1 = v1;
: e.v2 = v2;
:
: return e;
: }
:
: void insertEdge(nodeptr headers[], edge e)
: {
: nodeptr tmp;
:
: tmp = (nodeptr) malloc(sizeof(node)); // 노드 생성
: tmp->vertex = e.v2;
: tmp->link = headers[e.v1]; // 헤드 노드 앞에 삽입
: headers[e.v1] = tmp;
: }
:
: void printGraph(nodeptr headers[])
: {
: nodeptr tmp;
: int i;
:
: for (i = 0;i < NUM; i++) { // 각 헤드 노드에 대해서
: printf("Vertex %d:", i);
: tmp = headers[i];
: while (tmp != NULL) { // 정점에 인접된 각 노드에 대해서
: printf("%d ", tmp->vertex);
: tmp = tmp->link; // tmp를 다음 인접노드로 이동
: }
: printf("\n");
: }
: }
:
: void dfs(nodeptr headers[], int i)
: {
: nodeptr tmp; //생성된 노드
: printf("vertex %d\n", i);
: visited[i] = 1;
: for (tmp = headers[i]; tmp!= NULL; tmp = tmp->link)
: if (visited[tmp->vertex] != 1)
: dfs(headers, tmp->vertex);
: }
:
: // 공백 상태 검출 함수
: int is_empty(QueueType *q)
: {
: return (q->front == q->rear);
: }
: // 포화 상태 검출 함수
: int is_full(QueueType *q)
: {
: return ((q->rear+1)%MAX == q->front);
: }
: // 삽입 함수
: void enqueue(QueueType *q, element item)
: {
: if( is_full(q) )
: error("큐가 포화상태입니다");
: q->rear = (q->rear+1) % MAX;
: q->queue[q->rear] = item;
: }
: // 삭제 함수
: element dequeue(QueueType *q)
: {
: if( is_empty(q) )
: error("큐가 공백상태입니다");
: q->front = (q->front+1) % MAX;
: return q->queue[q->front];
: }
: // 삭제 함수
: element peek(QueueType *q)
: {
: if( is_empty(q) )
: error("큐가 공백상태입니다");
: return q->queue[(q->front+1) % MAX];
: }
: void bfs(nodeptr headers[], int i)
: {
: nodeptr tmp; // 생성된 노드
: QueueType q; // 너비우선탐색에 사용될 큐
: initGraph(&q); // 큐 초기화
: visited[i] = 1; // 정점 v 방문 표시
: while(!is_empty(&q))
: {
: i = dequeue(&q); // 큐에 저장된 정점 선택
: for(tmp = headers[i]; tmp; tmp = tmp->link)
: {
: if(!visited[tmp->vertex])
: { // 미방문 정점 탐색
: visited[tmp->vertex] = 1; // 방문 표시
: printf("%d ", tmp->vertex);
: enqueue(&q, tmp->vertex); //정점을 큐에 삽입
: }
: }
: } // 방문한 정점 출력 // 시작정점을 큐에 저장
:
: }
|