暑期訓練 0723

Ruby @ NTUIMCP 2022
Ruby@NTUIMCP

內容大綱

暑期訓練

最短路徑

Shortest Path

淹水問題

Flood Fill Problem
Ruby@NTUIMCP

淹水問題

Flood Fill Problem

暑期訓練

Ruby@NTUIMCP
淹水問題 Flood Fill Problem
Ruby@NTUIMCP

暑期訓練 > 淹水問題

淹水問題 Flood Fill Problem
1
2
3
4
Ruby@NTUIMCP

暑期訓練 > 淹水問題

淹水問題 Flood Fill Problem
Depth-First Search (DFS)
深度優先搜尋
Breadth-First Search (BFS)
廣度優先搜尋
How to flood fill?
該如何淹水?
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
深度優先搜尋,顧名思義:
以深度為優先進行「淹水擴散」
Ruby@NTUIMCP
優先擴散最「新」水源

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
2
3
4
1
1
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
2
4
2
4
3
1
2
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
3
1
2
3
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
3
1
2
3
4
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
4
1
2
3
4
5
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
4
1
2
3
4
5
6
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
1
7
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
1
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
2
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
3
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
4
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
1
2
3
4
5
6
7
8
9
Ruby@NTUIMCP

暑期訓練 > 淹水問題

深度優先搜尋 Depth-First Search
以 3x3 庭院示範:
1
2
3
4
5
6
7
8
9
Done!
Ruby@NTUIMCP

暑期訓練 > 淹水問題

暑期訓練 > 淹水問題

淹水問題 Flood Fill Problem
Depth-First Search (DFS)
深度優先搜尋
Breadth-First Search (BFS)
廣度優先搜尋
How to flood fill?
該如何淹水?
Ruby@NTUIMCP

暑期訓練 > 淹水問題

廣度優先搜尋,顧名思義:
以廣度為優先進行「淹水擴散」
Ruby@NTUIMCP
優先擴散最「舊」水源
廣度優先搜尋 Breadth-First Search

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
2
3
4
1
1
Ruby@NTUIMCP

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
2
3
4
1
Ruby@NTUIMCP
2
4
2

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
3
4
1
Ruby@NTUIMCP
2
4
2
3
1
3

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
4
1
Ruby@NTUIMCP
2
4
2
3
1
3
4
4
2

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
4
2
3
1
3
4
4
2
5
1
3

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
4
2
3
1
3
4
4
2
5
1
3
6
1

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
3
4
4
2
5
1
3
6
1
7

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
3
4
4
2
5
1
3
6
7

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
4
2
5
1
3
6
7
5

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
4
5
1
3
6
7
5

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
1
3
6
7
8
9

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
3
6
7
8
9

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9

暑期訓練 > 淹水問題

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9
Done!

暑期訓練 > 淹水問題

廣度優先搜尋 Breadth-First Search
以 3x3 庭院示範:
1
Ruby@NTUIMCP
2
3
1
4
5
6
7
8
9
Done!

暑期訓練 > 淹水問題

DFS / BFS 比較
Ruby@NTUIMCP

暑期訓練 > 淹水問題

Depth-First Search (DFS)
深度優先搜尋
Breadth-First Search (BFS)
廣度優先搜尋
How to flood fill?
該如何淹水?
優先擴散最「舊」水源
優先擴散最「新」水源
FILO -> Stack
FIFO -> Queue
淹水問題 Flood Fill Problem
Ruby@NTUIMCP

暑期訓練 > 淹水問題

DFS Implementation
Ruby@NTUIMCP

暑期訓練 > 淹水問題

def dfs(座標):
    do_somethig(座標)
    for 方向 in [上, 右, 下, 左]:
        新座標 = 座標 往 方向 走一格
        if not visited(新座標):
            dfs(新座標)
BFS Implementation
Ruby@NTUIMCP

暑期訓練 > 淹水問題

def bfs(pos):
    q = [pos]
    while q 不為空:
        curr = q[0]
        q.pop(0)
        do_somethig(curr)
        for 方向 in [上, 右, 下, 左]:
            新座標 = 座標 往 方向 走一格
            if not visited(新座標):
                q.append(新座標)
小試身手 Exercise
25 min
Ruby@NTUIMCP

暑期訓練 > 淹水問題

小試身手 Exercise
參考做法:
遍歷整個 grid ,每見到一格水,就把答案 +1 ,並且在該點做 dfs 把連續水方塊做標記,才不會重複計算水池數量。
Ruby@NTUIMCP

暑期訓練 > 淹水問題

淹水問題

Flood Fill Problem
Ruby@NTUIMCP

暑期訓練

內容大綱

暑期訓練

最短路徑

Shortest Path

淹水問題

Flood Fill Problem
Ruby@NTUIMCP

最短路徑

Shortest Path

暑期訓練

Ruby@NTUIMCP
Shortest Path Finding

暑期訓練 > 最短路徑

Breadth-First Search (BFS)
廣度優先搜尋
How to find shortest path?
怎麼找到最短路徑?
Dijkstra 
Shortest-Path
單源最短路徑
Ruby@NTUIMCP
Shortest Path Finding

暑期訓練 > 最短路徑

Ruby@NTUIMCP
Dijkstra Shortest-Path Algorithm

暑期訓練 > 最短路徑

Ruby@NTUIMCP
小試身手 Exercise
Ruby@NTUIMCP

暑期訓練 > 淹水問題

內容大綱

暑期訓練

最短路徑

Shortest Path

淹水問題

Flood Fill Problem
Ruby@NTUIMCP
謝謝大家

Brought to you by Ruby
Ruby@NTUIMCP

台大資管競程系隊 暑期訓練 07/23

By Ruby Ku

台大資管競程系隊 暑期訓練 07/23

台大資管競程系隊 暑期訓練 07/23: BFS/DFS/Dijkstra Shortest Path

  • 189