CHAP 10:그래프 (2) 2016. 9. 27 순천향대학교 하상호.

Slides:



Advertisements
Similar presentations
14 장. 그래프 알고리즘 Internet Computing KUT Youn-Hee Han.
Advertisements

이진 나무 구조 강윤섭 2008년 5월 23일.
그래프(Graph)
주요 내용 기본 용어 이진 트리(binary tree) 이진 탐색 트리(binary search tree)
주요 내용 기본 용어 그래프의 표현 오일러(Euler) 그래프와 해밀턴(Hamilton) 그래프
CHAP 8:우선순위큐 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 20).
제 6 장 그래프 6.1 그래프의 정의 6.2 용어 및 표현법 6.3 그래프의 표현 방법 6.4 그래프의 순회와 신장 트리
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
연결리스트(linked list).
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
Internet Computing KUT Youn-Hee Han
CHAP 10:그래프 (1) 순천향대학교 하상호.
CHAP 10:그래프 순천향대학교 하상호.
그래프 추상 데이타 타입(1/9) 개요 Koenigsberg 다리 문제 차수(degree) : 정점에 연결된 간선의 수
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 학기 데이터구조.
CHAP 10:그래프 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
CHAP 10 : 그래프 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 62).
자료구조론 10장 그래프(graph).
제 6 장 그래프.
되추적(Backtracking).
강의 #6 큐(Queue).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
다음 주 과제 7장 읽어오기 숙제 해서 다음 주(11월 12일) 제출하기. 큐(Queue) E304호,
자료구조: CHAP 6 큐 컴퓨터공학과 하 상 호.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
Chapter 10 그래프(graph) SANGJI University Kwangman KO
강의 #9 그래프(Graph).
그래프의 기본 연산 깊이-우선 탐색(DFS; Depth-First Search) (1) 출발 정점 v를 방문
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 10 : 그래프.
CHAP 10 : 그래프.
CHAP 10: 그래프(part 2) 순천향대학교 하상호.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
C언어 응용 제 11 주 그래프1.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
그래프(graph) 연결되어 있는 객체 간의 관계를 표현하는 자료구조 가장 일반적인 자료구조 형태
부분집합의 합 구하기 문제 부분집합의 합 구하기(Sum-of-Subsets) 문제
Introduction To Data Structures Using C
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
주요 내용 왜 그래프인가? 기본 용어 그래프의 표현 오일러(Euler) 그래프와 해밀턴(Hamilton) 그래프
쉽게 배우는 알고리즘 12장. 상태공간 트리의 탐색.
알고리즘: 우선순위 큐(8장) 순천향대학교 컴퓨터 학부 하 상 호.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
제 3 강.
자료구조: CHAP 7(2) 트리 순천향대학교 컴퓨터공학과 하 상 호.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
CHAP 12: 탐색 순천향대학교 컴퓨터학부 하 상 호.
트리.
알고리즘: 우선순위 큐(8장) 순천향대학교 컴퓨터 학부 하 상 호.
CHAP 10 : 그래프.
보고서 #2(제출기한: 09/23) 다음 문제를 해결하시오. (7)
Flow Diagram IV While.
부분집합의 합 구하기 문제 부분집합의 합 구하기(Sum-of-Subsets) 문제
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호.
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
쉽게 배우는 알고리즘 12장. 상태공간 트리의 탐색
우선순위 큐 & Heap Ref. C로 쉽게 풀어쓴 자료구조, 생능출판사, 2005.
제 9 장 그래프.
문제풀이방식-맹목적 탐색 Ai4.
보고서 #4 (1) (제출기한: 10/6) #1 다음 그래프 G에 대해서 답하시오. (2*5 = 10)
C++ Espresso 제15장 STL 알고리즘.
Presentation transcript:

CHAP 10:그래프 (2) 2016. 9. 27 순천향대학교 하상호

목차 그래프 개요 그래프 표현 그래프 탐색 연결 성분 신장 트리 최소비용 신장 트리 최단 경로 위상정렬

그래프 탐색 그래프 탐색은 그래프의 가장 기본적인 연산 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한번씩 방문 많은 문제들이 단순히 그래프의 노드를 탐색하는 것으로 해결 (예) 특정한 정점에서 다른 정점으로 갈 수 있는지 없는지 (예) 전자 회로에서 특정 단자와 단자가 서로 연결되어 있는지 연결되어 있지 않은지를 탐색을 통하여 알 수 있다..

그래프 탐색(cont.) 그래프 탐색(순회)의 2가지 방법 깊이우선탐색(DFS: depth-first search) 너비우선탐색(BFS: breadth-first search) 깊이 우선 탐색은 미로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 이 곳으로부터 다른 방향으로 다시 탐색을 진행하는 방법과 유사하다.

DFS 알고리즘 정점 v를 방문한다 v에 인접한 방문되지 않은 정점 w를 선택하고, w로부터 깊이 우선 방문 정점 u의 인접된 모든 정점들이 이미 방문되었으면, 가장 최근에 방문하였고, 아직 방문되지 않은 인접한 정점 w를 갖는 정점까지 거슬러 올라가서, W부터 깊이 우선 방문한다

Quiz: DFS 다음 그래프에서 0을 시작 정점으로 하여 깊이 우선 탐색 하라. 1 2 3 4

DFS 알고리즘 dfs(v: vertex) // 전역 변수 visited[1..n]가 false로 초기화 되었다고 가정 visited[v] = true; for (v에 인접한 각 정점 w에 대해서) do repeat end dfs

DFS 코드 (인접 행렬) *g로 전달되지 않음에 유의할 것 int visited[MAX_VERTICES]; // FALSE로 초기화되었다고 가정 // 방문 여부를 기록 dfs_mat(GraphType g, int v) int w; visited[v] = TRUE; for (w = 0; w < g.n; w++) do repeat0 end dfs_mat #define MAX 50 typedef struct graphType { int n; // 정점 개수 int adjMat[MAX][MAX]; // 인접 행렬 } graphType

DFS 코드 (인접 리스트) int visited[MAX_VERTICES]; // FALSE로 초기화되었다고 가정 dfs_list(GraphType g, int v) GraphNode *w; visited[v] = TRUE; for (w = g.adjList[v]; w != NULL; w = w.link) do repeat dfs_list #define MAX 50 typedef struct graphNode { int vertex; // 정점 struct graphNode *link; } graphNode; typedef struct graphType { int n; // 정점 개수 graphNode * adjList[MAX]; } graphType;

너비 우선 탐색 너비 우선 탐색(breath first search: BFS)은 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법 시작 정점 1 2 3 4

BFS 알고리즘 정점 v를 방문한다 v에 인접한 방문되지 않은 모든 정점 w를 방문 W에 인접한 방문되지 않은 모든 정점 w를 방문 …

BFS 구현 큐를 사용하여 구현됨

Quiz: BFS 다음 그래프에서 2를 시작 정점으로 하여 너비 우선 탐색 하라. 1 2 3 4

BFS 알고리즘(2) bfs(v: vertex) visited[v] = true; initQueue(q); // q is a queue addQueue(q, v); while (not is_empty(q)) do repeat end bfs

BFS 코드 (인접 행렬) int visited[MAX_VERTICES]; // FALSE로 초기화되었다고 가정 bfs_mat(GraphType g, int v) int w; QueueType q; init(&q); visited[v] = TRUE; enqueue(&q, v); while (!isEmpty(q)) do repeat end bfs_mat #define MAX 50 typedef struct graphType { int n; // 정점 개수 int adjMat[MAX][MAX]; // 인접 행렬 } graphType

BFS 코드 (인접 리스트) int visited[MAX_VERTICES]; // FALSE로 초기화되었다고 가정 bfs_list(GraphType g, int v) GraphNode *w; QueueType q; init(&q); visited[v] = TRUE; enqueue(&q, v); while (!isEmpty(q)) do repeat end bfs_list #define MAX 50 typedef struct graphNode { int vertex; // 정점 struct graphNode *link; } graphNode; typedef struct graphType { int n; // 정점 개수 graphNode * adjList[MAX]; } graphType;

복 습 다음 그래프 G에 대해서 답하시오. 인접리스트 표현은? dfs에 의한 방문 순서는? 2 1 3 4 5 6 7 8

코드: 프로그램 10.5

연결 그래프 연결 그래프란? 그래프 G가 주어지면, G가 연결되어있는지 어떻게 알 수 있는가? 2 1 4 5 3

연결 성분 연결 성분이란? 그래프 G가 주어지면, G의 연결 성분을 어떻게 구할 수 있는가?

연결 성분 찾기 알고리즘 Comp(g: graph) int visited[n] = {0}; // 모든 정점을 방문되지 않은 상태로 초기화 for (g에 속한 각 정점 v 에 대해서) do repeat end comp

Visited[] 원소값이 true/false가 아닌 counter 값 저장 연결 성분 찾기 알고리즘 Visited[] 원소값이 true/false가 아닌 counter 값 저장 다음 그래프에 대해서 알고리즘을 적용한 결과는? counter는 전역 변수 void find_connected_component(GraphType g) int v; // visited[] = {0}으로 초기화되었다고 가정 count = 0; for(v=0; v<g.n; v++) do// 각 정점에 대해서 repeat end find_connected_component