We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
✅ 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식
[특징]
✅ 인접 리스트 : 리스트로 그래프의 연결 관계를 표현하는 방식
연결 리스트 라는 자료구조를 이용해 구현한다.
연결 리스트
모든 노드에 연결된 노드에 대한 정보를 차례대로 연결하여 저장한다.
주로 노드로 배열을 만들어서, 이들이 갈 수 있는 간선을 배열(혹은 연결 리스트)로 저장한다.
→ Dictionary로 표현 가능
DFS는 깊이우선탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
DFS는 스택 자료구조를 이용한다.
[ DFS 동작 방식 ]
var graph: [String: [String]] = [ "A" : ["D", "C", "B"], "B" : ["E", "A"], "C" : ["F", "A"], "D" : ["H", "G", "A"], "E" : ["J", "I", "B"], "F" : ["C"], "G" : ["D"], "H" : ["K", "D"], "I" : ["E"], "J" : ["E"], "K" : ["H"] ] func DFS(graph: [String: [String]], start: String) -> [String] { // 방문한 노드 정보를 저장하는 Queue var visitedQueue: [String] = [] // stack에 첫번째 노드 넣으며 시작 var needVisitStack: [String] = [start] // 방문 예정 노드가 담긴 stack이 비어있지 않다면 => 반복 while !needVisitStack.isEmpty { let node: String = needVisitStack.removeLast() // stack이기 때문에 -> LIFO if visitedQueue.contains(node) { continue } visitedQueue.append(node) needVisitStack += graph[node] ?? [] } return visitedQueue } print(DFS(graph: graph, start: "A")) // ["A", "B", "E", "I", "J", "C", "F", "D", "G", "H", "K"]
BFS는 너비우선탐색이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다.
BFS는 선입선출 방식인 큐 자료구조를 이용한다. 인접한 노드를 반복적으로 큐에 넣도록 알고리즘을 작성하면 자연스럽게 먼저 들어온 것이 먼저 나가게 되어, 가까운 노드부터 탐색을 진행하게 된다.
[ BFS 동작 방식 ]
var graph: [String: [String]] = [ "A" : ["B", "C", "D"], "B" : ["A", "E"], "C" : ["A", "F"], "D" : ["A", "G", "H"], "E" : ["B", "I", "J"], "F" : ["C"], "G" : ["D"], "H" : ["D", "K"], "I" : ["E"], "J" : ["E"], "K" : ["H"] ] func BFS(graph: [String: [String]], start: String) -> [String] { // 방문한 노드 정보를 저장하는 Queue var visitedQueue: [String] = [] // queue에 첫번째 노드 넣으며 시작 var needVisitQueue: [String] = [start] // 방문 예정 노드가 담긴 queue가 비어있지 않다면 => 반복 while !needVisitQueue.isEmpty { let node: String = needVisitQueue.removeFirst() // Queue 자료구조를 활용하므로 FIFO if visitedQueue.contains(node) { continue } visitedQueue.append(node) needVisitQueue += graph[node] ?? [] } return visitedQueue } print(BFS(graph: graph, start: "A")) // ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]
<참고 자료> https://babbab2.tistory.com/105 https://babbab2.tistory.com/106 [https://velog.io/@wkdgus7113/그래프와-DFS-BFS-정리](https://velog.io/@wkdgus7113/%EA%B7%B8%EB%9E%98%ED%94%84%EC%99%80-DFS-BFS-%EC%A0%95%EB%A6%AC) [https://velog.io/@metamong/인접-행렬과-인접-리스트-iuh5qm4d](https://velog.io/@metamong/%EC%9D%B8%EC%A0%91-%ED%96%89%EB%A0%AC%EA%B3%BC-%EC%9D%B8%EC%A0%91-%EB%A6%AC%EC%8A%A4%ED%8A%B8-iuh5qm4d)
The text was updated successfully, but these errors were encountered:
hwangJi-dev
No branches or pull requests
그래프
그래프의 종류
그래프 표현 방식
✅ 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식
[특징]
✅ 인접 리스트 : 리스트로 그래프의 연결 관계를 표현하는 방식
연결 리스트
라는 자료구조를 이용해 구현한다.모든 노드에 연결된 노드에 대한 정보를 차례대로 연결하여 저장한다.
주로 노드로 배열을 만들어서, 이들이 갈 수 있는 간선을 배열(혹은 연결 리스트)로 저장한다.
→ Dictionary로 표현 가능
[특징]
DFS
DFS는 깊이우선탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
DFS는 스택 자료구조를 이용한다.
[ DFS 동작 방식 ]
DFS를 이용한 그래프 탐색
BFS
BFS는 너비우선탐색이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다.
BFS는 선입선출 방식인 큐 자료구조를 이용한다. 인접한 노드를 반복적으로 큐에 넣도록 알고리즘을 작성하면 자연스럽게 먼저 들어온 것이 먼저 나가게 되어, 가까운 노드부터 탐색을 진행하게 된다.
[ BFS 동작 방식 ]
BFS를 이용한 그래프 탐색
<참고 자료>
https://babbab2.tistory.com/105
https://babbab2.tistory.com/106
[https://velog.io/@wkdgus7113/그래프와-DFS-BFS-정리](https://velog.io/@wkdgus7113/%EA%B7%B8%EB%9E%98%ED%94%84%EC%99%80-DFS-BFS-%EC%A0%95%EB%A6%AC)
[https://velog.io/@metamong/인접-행렬과-인접-리스트-iuh5qm4d](https://velog.io/@metamong/%EC%9D%B8%EC%A0%91-%ED%96%89%EB%A0%AC%EA%B3%BC-%EC%9D%B8%EC%A0%91-%EB%A6%AC%EC%8A%A4%ED%8A%B8-iuh5qm4d)
The text was updated successfully, but these errors were encountered: