C언어 응용 제11주 실습 해보기 제9장 그래프1.

Slides:



Advertisements
Similar presentations
© 2012 인피니티북스 All rights reserved 제 3 장 이클립스 사용하기 Power Java.
Advertisements

개인의견 차가있을수있음 훈훈한남자 배우 TOP 5. 5 위는 박보검 웃을때보이는 치명적인 미소 꺄 ~~~ 5위5위.
제 2 장 프로그램 개발과정. 통합 개발 환경  통합 개발 환경 (IDE: integrated development environment)  에디터 + 컴파일러 + 디버거.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Page 1 Android Programming November 04 / 2009 S/W Junhyuk Jang.
G202G202 G201G201.
임베디드 모바일 프로그래밍 1 3. 첫 번째 어플리케이션 작성 텍스트 ‘Hello BREW ^^’ 를 출력하는 프로그램 작성하기 (1) App. 프로젝트 - 시작 프로젝트를 작성하기 위하여 MS-Visual C++ 를 실행시킨다. [File  New] 를 선택하고, New.
아름다운 이들의 행복한 길음안나의 집.
가수 아이돌 김수빈.
변비 재활전문센터 재활 간호사 김은화.
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
C 언어 기초 2 위덕대학교 에너지전기공학부 이 수 형 2009년 2학기.
제3장 C 프로그래밍 환경.
Q & A (사실상 혼인·이혼) Q. 사실상 혼인·이혼 관계를 어떻게 처리해야 하나요?   사실 혼인·이혼은 부부 모두 동의 여부를 확인하고, 자녀, 이·통·반장으로부터 「사실(이)혼 확인서」를 징구해야 합니다. 만약 어느 한쪽이 동의하지 않는 경우는.
베 어 스 타 운 동 계 시 즌 주소: 경기도 포천시 내촌면 소학리 295번지 문의 : (代)
메탄 하이드레이트 활용 방법과 기술 환경공학과 천대길.
Chapter 02 JAVA 프로그래밍 시작하기 01 실무에서 사용하는 JAVA 개발 환경 02 JAVA 프로그램 작성
기초C언어 제1주 강의 소개, C언어 개요, Eclipse 사용 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원
3교회 주일예배
1. C 언어의 이해와 컴파일러 설치.
Internet Computing KUT Youn-Hee Han
Internet Computing KUT Youn-Hee Han
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
스택(stack) SANGJI University Kwangman Ko
제3장 이클립스 사용하기.
Java IT응용시스템공학과 김형진 교수 2장. 자바의 환경 public class SumTest {
2장. JSP 개발 환경 설정 이 장에서 배울 내용 : JSP 페이지를 작성하기 위한 개발환경을 설정하고, 웹 애플리케이션 개발을 위해 반드시 이해하여야 할 웹 애플리케이션 폴더 구조에 대해 학습한다. 또한 요청된 JSP 페이지가 어떠한 처리과정을 거쳐 응답이 이루어지는가에.
Android 개발환경 설치 및 Hello World
DataScience Lab. 박사과정 김희찬 (월)
스택(Stack) 김진수
객체지향 프로그래밍 (강의소개)
2강. 개발 환경 설정 JDK 설치 Path 설정 이클립스 다운로드 톰캣 설치 톰캣 환경 설정
보상사업 제안서 반룡일반산업단지 사업시행자 성창아이엔디㈜ 대표 정연교님 귀하 주 식 회 사 한 국 보 상 원.
2.1 재배정 재배정요구등록 재배정승인취소 재배정부서연결 재배정단위업무연결
DataScience Lab. 박사과정 김희찬 (월)
C언어 응용 제10주 실습 해보기 제8장 트리.
1강. 스프링이란? 프레임워크 스프링(SPRING) 설치 Lecturer Kim Myoung-Ho Nickname 블스
C언어 응용 제6주 실습 해보기 제5장.
강의 소개, 자료구조의 개념, SW 개발과 자료구조
개인 맞춤형 교수 학습 지원 시스템 요소 기술 ETRI Technology Marketing Strategy
Appendix A 구조적 시스템 개발 방법론.
쉽게 풀어쓴 C언어 Express 제2장 프로그램 작성 과정 C Express.
* 위치 * 특징 - 오산/신동탄/용인IC/양지IC 15분 거리에 위치.
기초C언어 제4주 실습 프로젝트 아카이브로 저장하기/가져오 기 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
C언어 응용 제7주 실습 해보기 제6장.
고전에서 미래를 읽다(3) 오동누습(吾東陋習) 우리나라의 제일 나쁜 더러운 버릇을 버려라.
고객님! 장수시대 필수 상품 준비하셨나요? 간 병 보 험 무배당 무배당 상품특징!! ~3등급 2 구분
C언어 응용 제1주 실습 해보기.
주일예배 6교회
중등교원 전보시스템 로그인 오류시 해결 해결방안 * 작성일 2016 년 12 월 15일 * 작성자 광주광역시교육청.
마음의 성전이 더 아름다운 조촌교회.
JESS Eclipse 박영택 숭실대학교.
JSP와의 첫 만남 간간한 JSP 프로그램을 작성하면서 앞으로 학습에 필요한 과정을 익힌다.
C언어 개론.
1.비 사업용(자가용 및 관용) 차 종 적 용 상 의 구 분 승합 자동차 (버스) 1 종
1st 과제 Puzzle 개선 강원대학교 김순태.
성립전예산 요구등록 (사업담당자) 사업관리카드 1 2
8.5 사람의 유전은 어떻게 연구하는가.
OPENGL project 구성원 : 김수민,남현우 OPENGL을 이용한 당구(3구) 구현하기.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
대한민국-스웨덴 수교 60주년 기념 행사 주 스웨덴 대한민국 대사관 (토)
6월 1주 주간메뉴표 NEW 엄마손 조식 쉐프 삼촌 중식 참새 방앗간 석식 ◎원산지 안내 : 쌀(국내산)
자료구조 강의소개 정성훈 연락처 : 이메일 : 연구실 : 연219호 연락처 : 이메일 : 홈페이지: 정성훈.
원천 6교회 12월 20일 주일 예배.
청소년 댄스 경연대회 제35회 문화체육관광부장관大賞 전국레크리에이션대회
박 현 미 울산여자상업고등학교 창업포스터 만들며 포토샵과 친해지기 박 현 미 울산여자상업고등학교.
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
Choi Younghwan CSE HUFS
적정기술 사례 대한민국 연료비 40% 감소 G-saver 적정기술 1호 (축열난방기) 내부 평균온도 열원이 오래 보존
Presentation transcript:

C언어 응용 제11주 실습 해보기 제9장 그래프1

실습 내용 예제 9-1 그래프의 인접행렬 표현 예제 9-2 그래프의 인접리스트 표현 예제 9-3 그래프의 깊이우선 탐색 예제 9-4 그래프의 너비우선 탐색

예제 9-1 실습하기 행렬을 이용한 그래프 구현 그래프를 구현한 소스파일과 헤더파일을 따로 작 성한다. 구현한 함수 목록 initializeGraph : 그래프를 초기화하는 함수 insertVertex : 정점을 추가하는 함수 insertEdge : 간선을 추가하는 함수 printGraph : 그래프를 출력하는 함수

실습내용 우측 그림과 같은 4 개의 그래프를 인접 행렬로 구현한 후 인 접행렬을 출력한다. 해야할일 우측 그림과 같은 4 개의 그래프를 인접 행렬로 구현한 후 인 접행렬을 출력한다. 해야할일 인접행렬로 구현한 그 래프형 구조체 선언 그래프를 구성하기 위 한 함수들 구현 이를 테스트하는 main 함수 구현

소스 목록 및 내용 adjgraph.h : 그래프구현에 필요한 자료형과 함수 의 원형을 선언하는 헤더 파일 adjgraph.c : 그래프구현에 필요한 함수의 내용을 작성한 소스 ex0901.c : 그래프를 테스트하는 main 소스 파일

실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 adjgraph.h 파일 작성 adjgraph.c 파일 작성 ex0901.c 작성 빌드 및 실행 결과 확인

소스들 사이의 연관 관계 adjgraph.h ex0901.c 그래프 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. 구현된 그래프를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. adjgraph.c 그래프 구현에 필요한 함수의 내용을 작성한다.

main 소스 코드 그래프를 만들고 인접행렬을 출력한다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

이제 프로그램을 작성할 준비가 되었으므로 실행 파일을 작성할 프로젝트를 생성한다. 다음 슬라이드에 설명한 바대로 빈 프로젝트를 만 든다.

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch0901 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch0901

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트 이제 빈 프로젝트가 생성 되었으므로 그래프를 구 현하기 위한 구조체와 함수 원형을 선언한 헤더를 추가한다. 이제 빈 프로젝트가 생성 되었으므로 그래프를 구 현하기 위한 구조체와 함수 원형을 선언한 헤더를 추가한다. 본인 컴퓨터의 사양에 따라 내용은 약간씩 다를 수 있음

adjgraph.h 추가 및 작성 Header File 선택

adjgraph.h 추가 및 작성 Ch0901 프로젝트명 설정(자동설정) adjgraph.h 헤더 파일 명 설정

adjgraph.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

adjgraph.h 추가 및 작성 그래프 구조체 및 함수 원형 선언 최대 정점의 수를 30으로 한다. 인접행렬로 구현한 그래프를 표현하는 구조체. 인접행렬의 크기는 최대 정점의 수로 한다. 인접행렬로 구현한 그래프와 연관된 함수 들의 원형

이제 그래프를 구현하기 위한 구조체와 관련 함수 의 원형을 선언했으므로 함수의 내용을 작성할 소 스 adjgraph 이제 그래프를 구현하기 위한 구조체와 관련 함수 의 원형을 선언했으므로 함수의 내용을 작성할 소 스 adjgraph.c 를 작성한다.

adjgraph.c 추가 및 작성 Source File 선택

adjgraph.c 추가 및 작성 Ch0901 프로젝트명 확인(자동설정) adjgraph.c 소스 파일명 설정

adjgraph.c 추가 및 작성 자동 생성된 빈 소스 파일 우측 그림과 같이 자동생 성된 빈 소스파일에 필요 한 코드를 추가한다. 필요한 헤더 추가 선언된 각 함수 구현

adjgraph.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 그래프관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

initializeGraph() 함수 매개변수로 주어진 그래프를 초기화 한다. 이 함수가 하는 일을 기술하면 다음과 같다.

initializeGraph() 함수 매개변수로 주어진 그래프를 초기화 한다.

insertVertex() 함수 그래프에 정점을 추가한다. 인접행렬로 구현한 그래프는 정점의 추가가 정점 의 수만 늘려 주면 된다.

insertVertex() 함수 그래프에 정점을 추가한다. 인접행렬로 구현한 그래프는 정점의 추가가 정점 의 수만 늘려 주면 된다.

insertEdge() 함수 그래프에 간선을 추가한다. 간선을 추가하는 것은 해당하는 행렬의 요소 값을 1로 설정하면 된다.

insertEdge() 함수 그래프에 간선을 추가한다. 간선을 추가하는 것은 해당하는 행렬의 요소 값을 1로 설정하면 된다.

printGraph() 함수 그래프를 출력한다.

printGraph() 함수 그래프를 출력한다.

이제 그래프를 구현하는 구조체와 그와 연관된 함 수들을 모두 작성했으므로 그래프를 생성하고 출 력해 보는 함수를 작성할 것이다. 이 소스는 ex0901.c 로 작성하고 main 함수를 작 성하여 앞 그림의 G1, G2, G3, G4를 생성하고 출 력하여 확인한다.

ex0901.c 추가 및 작성 Source File 선택

ex0901.c 추가 및 작성 Ch0901 프로젝트명 확인(자동설정) ex0901.c 소스 파일명 설정

추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0901.c, adjgraph.c, adjgraph.h 가 추가된 것을 확인할 수 있다.

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 메모리 관련 함수 헤더 그래프 관련 함수 헤더

main 함수 우측 그림과 같은 그 래프를 만들고 출력 을 한다.

main 함수 작성 프로그램의 가독성을 높이기 위하여 G1, G2, G3, G4를 생성하는 함수를 따로 작성함.

G1을 생성하는 함수 A:0, B:1, C:2, D:3 그래프 초기화 4 개의 정점 추가 A->B 간선 추가 A->D 간선 추가

G2,G3, G4를 생성하는 함수

빌드 및 실행 결과

도전 문제 위 예제에서 printGraph() 함수를 수정하여 각 노 드의 차수를 각 행의 마지막에 출력하도록 하시오. 위 예제를 활용하여 다음 그래프를 작성하고 인접 행렬을 출력하는 프로그램을 작성하시오.

예제 9-2 실습하기 연결리스트를 이용한 그래프 구현 그래프를 구현한 소스파일과 헤더파일을 따로 작 성한다. 구현한 함수 목록 initializeGraph : 그래프를 초기화하는 함수 clearGraph : 그래프에서 사용하는 메모리를 반환한다. freeList : 연결 리스트의 메모리를 반환한다. insertVertex : 정점을 추가하는 함수 insertEdge : 간선을 추가하는 함수 printGraph : 그래프를 출력하는 함수

실습내용 우측 그림과 같은 4 개의 그래프를 연결 리스트로 구현한 후 인접정보를 출력한 다. 해야할일 우측 그림과 같은 4 개의 그래프를 연결 리스트로 구현한 후 인접정보를 출력한 다. 해야할일 연결리스트로 구현한 그래프형 구조체 선언 그래프를 구성하기 위 한 함수들 구현 이를 테스트하는 main 함수 구현

소스 목록 및 내용 linkgraph.h : 그래프구현에 필요한 자료형과 함 수의 원형을 선언하는 헤더 파일 linkgraph.c : 그래프구현에 필요한 함수의 내용을 작성한 소스 ex0902.c : 그래프를 테스트하는 main 소스 파일 정점의 수 정점 데이터 다음 정점 노드 포인터 각 정점의 헤드 노드 배열

실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 linkgraph.h 파일 작성 linkgraph.c 파일 작성 ex0902.c 작성 빌드 및 실행 결과 확인

소스들 사이의 연관 관계 linkgraph.h ex0902.c 그래프 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. 구현된 그래프를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. linkgraph.c 그래프 구현에 필요한 함수의 내용을 작성한다.

main 소스 코드 그래프를 만들고 인접정보를 출력한다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

이제 프로그램을 작성할 준비가 되었으므로 실행 파일을 작성할 프로젝트를 생성한다. 다음 슬라이드에 설명한 바 대로 빈 프로젝트를 만 든다.

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch0902 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch0902

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트 이제 빈 프로젝트가 생성 되었으므로 그래프를 구 현하기 위한 구조체와 함수 원형을 선언한 헤더를 추가한다. Ch0902 이제 빈 프로젝트가 생성 되었으므로 그래프를 구 현하기 위한 구조체와 함수 원형을 선언한 헤더를 추가한다. 본인 컴퓨터의 사양에 따라 내용은 약간씩 다를 수 있음

linkgraph.h 추가 및 작성 Header File 선택

linkgraph.h 추가 및 작성 Ch0902 프로젝트명 설정(자동설정) linkgraph.h 헤더 파일 명 설정

linkgraph.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

linkgraph.h 추가 및 작성 그래프 구조체 및 함수 원형 선언 최대 정점의 수를 30으로 한다. 그래프의 정점을 연결리스트로 구현하기 위한 노드 구조체 연결리스트로 구현한 그래프 구조체 정점 노드 배열의 크기는 최대 정점의 수로 했다. 연결리스트로로 구현한 그래프와 연관된 함수 들의 원형

이제 그래프를 구현하기 위한 구조체와 관련 함수 의 원형을 선언했으므로 함수의 내용을 작성할 소 스 linkgraph 이제 그래프를 구현하기 위한 구조체와 관련 함수 의 원형을 선언했으므로 함수의 내용을 작성할 소 스 linkgraph.c 를 작성한다.

linkgraph.c 추가 및 작성 Source File 선택

linkgraph.c 추가 및 작성 Ch0902 프로젝트명 확인(자동설정) linkgraph.c 소스 파일명 설정

linkgraph.c 추가 및 작성 자동 생성된 빈 소스 파일 아래 그림과 같이 자동생성된 빈 소스파일에 필 요한 코드를 추가한다. 필요한 헤더 추가 선언된 각 함수 구현

linkgraph.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 그래프관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

initializeGraph() 함수 매개변수로 주어진 그래프를 초기화 한다. 이 함수가 하는 일을 기술하면 다음과 같다.

initializeGraph() 함수 매개변수로 주어진 그래프를 초기화 한다.

clearGraph() 함수 그래프가 사용하는 메모리를 반환한다.

freeList() 함수 연결리스트가 사용하는 메모리를 반환한다.

insertVertex() 함수 그래프에 정점을 추가한다. 연결리스트로 구현한 그래프는 정점의 추가가 정 점의 수만 늘려 주면 된다.

insertVertex() 함수 그래프에 정점을 추가한다. 연결리스트로 구현한 그래프는 정점의 추가가 정 점의 수만 늘려 주면 된다.

insertEdge() 함수 그래프에 간선을 추가한다. 간선을 추가하는 것은 해당하는 정점노드에 새로 운 노드를 추가한다.

insertEdge() 함수 그래프에 간선을 추가한다. 간선을 추가하는 것은 해당하는 정점노드에 새로 운 노드를 추가한다.

printGraph() 함수 그래프를 출력한다.

printGraph() 함수 그래프를 출력한다.

이제 그래프를 구현하는 구조체와 그와 연관된 함 수들을 모두 작성했으므로 그래프를 생성하고 출 력해 보는 함수를 작성할 것이다. 이 소스는 ex0902.c 로 작성하고 main 함수를 작 성하여 앞 그림의 G1, G2, G3, G4를 생성하고 출 력하여 확인한다.

ex0902.c 추가 및 작성 Source File 선택

ex0902.c 추가 및 작성 Ch0902 프로젝트명 확인(자동설정) ex0902.c 소스 파일명 설정

추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0902.c, linkgraph.c, linkgraph.h 가 추가된 것을 확인할 수 있다.

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 메모리 관련 함수 헤더 그래프 관련 함수 헤더

main 함수 우측 그림과 같은 그 래프를 만들고 출력 을 한다.

main 함수 작성 프로그램의 가독성을 높이기 위하여 G1, G2, G3, G4를 생성하는 함수를 따로 작성함.

G1을 생성하는 함수 A:0, B:1, C:2, D:3 그래프 초기화 4 개의 정점 추가 A->D 간선 추가 인접리스트를 오름차순으로 추가 하기 위하여 큰 노드와 연결된 정보를 먼저 추가함.

G2,G3, G4를 생성하는 함수

빌드 및 실행 결과

도전 문제 위 예제에서 printGraph() 함수를 수정하여 각 노 드의 차수를 각 행의 마지막에 출력하도록 하시오. 위 예제를 활용하여 다음 그래프를 작성하고 인접 리스트 출력하는 프로그램을 작성하시오.

예제 9-3 실습하기 인접리스트를 이용해 구현한 그래프의 깊이우선 탐색 프로그램 인접리스트를 이용해 구현한 그래프의 깊이우선 탐색 프로그램 그래프를 구현한 소스파일과 헤더파일, 탐색을 위 한 스택을 위한 소스 및 헤더파일을 따로 작성한다. 구현한 함수 목록(그래프 관련) initializeGraph : 그래프를 초기화하는 함수 clearGraph : 그래프에서 사용하는 메모리를 반환한다. freeList : 연결 리스트의 메모리를 반환한다. insertVertex : 정점을 추가하는 함수 insertEdge : 간선을 추가하는 함수 printGraph : 그래프를 출력하는 함수 dfsTraversal : 깊이우선 방법으로 그래프 탐색

예제 9-3 실습하기 구현한 함수 목록(스택 관련) push : 스택에 자료 추가 pop : 스택에서 자료 삭제 clearStack : 스택이 사용한 메모리 반환 isEmpty : 스택이 비었는지를 판단하는 함수

실습내용 우측 그림과 같은 그래프를 연 결리스트로 구현한 후 깊이우선 탐색 결과를 출력한다. 해야할일 우측 그림과 같은 그래프를 연 결리스트로 구현한 후 깊이우선 탐색 결과를 출력한다. 해야할일 연결리스트로 구현한 그래프형 구 조체 선언 그래프를 구성하기 위한 함수들 구 현 탐색을 위한 스택 구조체 선언 스택에 필요한 함수 구현 깊이 우선 탐색 결과를 출력하는 main함수 구현

소스 목록 및 내용 linkgraph.h : 그래프구현에 필요한 자료형과 함수의 원형을 선 언하는 헤더 파일 linkgraph.c : 그래프구현에 필요한 함수의 내용을 작성한 소스 linkstack.h : 스택구현에 필요한 자료형과 함수 원형 을 선언하 는 헤더 linkstack.c : 스택을 구현한 소스 파일 ex0903.c : 그래프를 테스트하는 main 소스 파일 정점의 수 정점 데이터 다음 정점 노드 포인터 각 정점의 헤드 노드 배열 각 정점의 방문 정보 배열

실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective는 C/C++ 이어야 한다. 프로젝트 생성 linkstack.h 파일 작성 linkstack.c 파일 작성 linkgraph.h 파일 작성 linkgraph.c 파일 작성 ex0903.c 작성 빌드 및 실행 결과 확인

소스들 사이의 연관 관계 linkgraph.h, linkstack.h ex0903.c 그래프와 스택 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. ex0903.c 구현된 그래프를 깊이우선 탐색하는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. linkgraph.c, linkstack.c 그래프와 스택 구현에 필요한 함수의 내용을 작성한다.

main 소스 코드 그래프를 만들고 깊이우선 탐색 결과를 출력한다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

이제 프로그램을 작성할 준비가 되었으므로 실행 파일을 작성할 프로젝트를 생성한다. 다음 슬라이드에 설명한 바 대로 빈 프로젝트를 만 든다.

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch0903 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch0903

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트 Ch0903 이제 빈 프로젝트가 생성 되었으므로 스택구현을 위한 구조체와 함수 원형을 선언한 헤더와 그래프 를 구현하기 위한 구조체와 함수 원형을 선언한 헤 더를 추가한다. 본인 컴퓨터의 사양에 따라 내용은 약간씩 다를 수 있음

linkstack.h 추가 및 작성 Header File 선택

linkstack.h 추가 및 작성 Ch0903 프로젝트명 설정(자동설정) linkstack.h 헤더 파일 명 설정

linkstack.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

linkstack.h 추가 및 작성 스택 구조체 및 함수 원형 선언 스택을 연결리스트로 구현하기 위한 노드 구조체 연결리스트로 구현한 스택과 연관된 함수 들의 원형

이제 스택을 구현하기 위한 구조체와 관련 함수의 원형을 선언했으므로 함수의 내용을 작성할 소스 linkstack 이제 스택을 구현하기 위한 구조체와 관련 함수의 원형을 선언했으므로 함수의 내용을 작성할 소스 linkstack.c 를 작성한다. 스택은 항상 자료의 입출력 창구인 top 변수가 있 어야 한다. 스택을 구현하기 위하여 이 변수를 linkstack.c 의 전역 변수로 선언하고 NULL 로 초 기화 한다. 스택과 연관한 모든 함수는 이 전역변수 top을 참 조한다.

linkstack.c 추가 및 작성 Source File 선택

linkstack.c 추가 및 작성 Ch0903 프로젝트명 확인(자동설정) linkstack.c 소스 파일명 설정

linkstack.c 추가 및 작성 자동 생성된 빈 소스 파일 아래 그림과 같이 자동생성된 빈 소스파일에 필 요한 코드를 추가한다. 필요한 헤더 추가 선언된 각 함수 구현

linkstack.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 스택관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

push() 함수

pop 함수

clearStack 함수 남아있는 자료가 있는 경우 메모리를 반환한다.

isEmpty() 함수

이제 탐색을 위한 스택을 구현했으므로 인접리스 트를 이용한 그래프를 구할 차례이다. 다음의 내용은 예제 9-2와 거의 동일하며, 탐색을 위하여 구조체와 함수를 일부 수정한다.

linkgraph.h 추가 및 작성 Header File 선택

linkgraph.h 추가 및 작성 Ch0903 프로젝트명 설정(자동설정) linkgraph.h 헤더 파일 명 설정

linkgraph.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

linkgraph.h 추가 및 작성 그래프 구조체 및 함수 원형 선언 최대 정점의 수를 30으로 한다. 그래프의 정점을 연결리스트로 구현하기 위한 노드 구조체 연결리스트로 구현한 그래프 구조체 정점 노드 배열의 크기는 최대 정점의 수로 했다. 연결리스트로로 구현한 그래프와 연관된 함수 들의 원형

이제 그래프를 구현하기 위한 구조체와 관련 함수 의 원형을 선언했으므로 함수의 내용을 작성할 소 스 linkgraph 이제 그래프를 구현하기 위한 구조체와 관련 함수 의 원형을 선언했으므로 함수의 내용을 작성할 소 스 linkgraph.c 를 작성한다.

linkgraph.c 추가 및 작성 Source File 선택

linkgraph.c 추가 및 작성 Ch0903 프로젝트명 확인(자동설정) linkgraph.c 소스 파일명 설정

linkgraph.c 추가 및 작성 자동 생성된 빈 소스 파일 아래 그림과 같이 자동생성된 빈 소스파일에 필 요한 코드를 추가한다. 필요한 헤더 추가 선언된 각 함수 구현

linkgraph.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 스택관련 함수 헤더 그래프관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

initializeGraph() 함수 매개변수로 주어진 그래프를 초기화 한다. 이 함수가 하는 일을 기술하면 다음과 같다.

initializeGraph() 함수 매개변수로 주어진 그래프를 초기화 한다.

clearGraph() 함수 그래프가 사용하는 메모리를 반환한다.

freeList() 함수 연결리스트가 사용하는 메모리를 반환한다.

insertVertex() 함수 그래프에 정점을 추가한다. 연결리스트로 구현한 그래프는 정점의 추가가 정 점의 수만 늘려 주면 된다.

insertVertex() 함수 그래프에 정점을 추가한다. 연결리스트로 구현한 그래프는 정점의 추가가 정 점의 수만 늘려 주면 된다.

insertEdge() 함수 그래프에 간선을 추가한다. 간선을 추가하는 것은 해당하는 정점노드에 새로 운 노드를 추가한다.

insertEdge() 함수 그래프에 간선을 추가한다. 간선을 추가하는 것은 해당하는 정점노드에 새로 운 노드를 추가한다.

printGraph() 함수 그래프를 출력한다.

printGraph() 함수 그래프를 출력한다.

dfsTraversal() 함수 깊이우선 방법으로 주어진 정점으로 부터 탐색을 시작한다.

dfsTraversal() 함수

이제 스택을 구현하는 구조체와 연관된 함수들과 그래프를 구현하는 구조체와 그와 연관된 함수들 을 모두 작성했으므로 그래프를 생성하고 깊이우 선 탐색 결과를 출력해 보는 함수를 작성할 것이 다. 이 소스는 ex0903.c 로 작성하고 main 함수를 작 성하여 앞 그림의 G1을 생성하고 깊이 우선 탐색 을 출력하여 확인한다.

ex0903.c 추가 및 작성 Source File 선택

ex0903.c 추가 및 작성 Ch0903 프로젝트명 확인(자동설정) ex0903.c 소스 파일명 설정

추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0903.c, linkstack.h, linkstack.c, linkgraph.c, linkgraph.h 가 추가된 것을 확인할 수 있다.

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 메모리 관련 함수 헤더 스택 관련 함수 헤더 그래프 관련 함수 헤더

main 함수 우측 그림과 같은 그래프 를 만들고 깊이우선 탐색 출력을 한다.

main 함수 작성 프로그램의 가독성을 높이기 위하여 G1, G2, G3, G4를 생성하는 함수를 따로 작성함.

G1을 생성하는 함수 A:0, B:1, C:2, D:3 그래프 초기화 4 개의 정점 추가 A->D 간선 추가 인접리스트를 오름차순으로 추가 하기 위하여 큰 노드와 연결된 정보를 먼저 추가함.

G2,G3, G4를 생성하는 함수

빌드 및 실행 결과

도전 문제 위 예제를 활용하여 다음 그래프를 작성하고 인접 리스트 출력하고 깊이우선 탐색 결과를 출력하는 프로그램을 작성하시오.

예제 9-4 실습하기 인접리스트를 이용해 구현한 그래프의 너비우선 탐색 프로그램 인접리스트를 이용해 구현한 그래프의 너비우선 탐색 프로그램 그래프를 구현한 소스파일과 헤더파일, 탐색을 위 한 스택을 위한 소스 및 헤더파일을 따로 작성한 다. 구현한 함수 목록(그래프 관련) initializeGraph : 그래프를 초기화하는 함수 clearGraph : 그래프에서 사용하는 메모리를 반환한다. freeList : 연결 리스트의 메모리를 반환한다. insertVertex : 정점을 추가하는 함수 insertEdge : 간선을 추가하는 함수 printGraph : 그래프를 출력하는 함수 bfsTraversal : 너비우선 방법으로 그래프 탐색

예제 9-4 실습하기 구현한 함수 목록(큐 관련) createQueue : 큐를 생성하는 함수 enQueue : 큐에 자료 추가 deQueue : 큐에서 자료 삭제 clearQueue : 큐가 사용한 메모리 반환 isEmpty : 큐가 비었는지를 판단하는 함수

예제 9-3과 책의 예제 9-4의 소스를 참고하여 예 제 9-4를 완성할 것

도전 문제 위 예제를 활용하여 다음 그래프를 작성하고 인접 리스트 출력하고 너비우선 탐색 결과를 출력하는 프로그램을 작성하시오.