Presentation is loading. Please wait.

Presentation is loading. Please wait.

101北一女中 資訊選手培訓營 圖論基礎 2012.07.08 Nan.

Similar presentations


Presentation on theme: "101北一女中 資訊選手培訓營 圖論基礎 2012.07.08 Nan."— Presentation transcript:

1 101北一女中 資訊選手培訓營 圖論基礎 Nan

2 圖論,到底是什麼呢?

3

4

5

6

7 圖論最常出現的形式: 點(Vertex or Node) 邊(Edge) 兩種在程式裡表示的方式: 鄰接矩陣跟鄰接串列 權重(Weight)
<無向邊vs. 有向邊> 權重(Weight) 兩種在程式裡表示的方式: 鄰接矩陣跟鄰接串列

8 鄰接矩陣 [0] [1] [2] [3] [4] 1 map 無權重無向邊 int map[5][5] =
1 無權重無向邊 int map[5][5] = { {0, 0, 1, 1, 1}, {0, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 0}, {1, 1, 1, 0, 0} };

9 鄰接矩陣 [0] [1] [2] [3] [4] 1 6 INF 4 3 map 有權重無向邊 #define INF 2147483647
1 6 INF 4 3 有權重無向邊 #define INF int map[5][5] = { {0, 1, 6, INF, INF}, {1, 0, 4, 3, 1}, {6, 4, 0, 1, INF}, {INF, 3, 1, 0, 1}, {INF, 1, INF, 1, 0} };

10 鄰接矩陣 無權重有向邊 有權重有向邊 [0] [1] [2] [3] [4] 1 [0] [1] [2] [3] [4] 2 INF 1 5
map [0] [1] [2] [3] [4] 1 有權重有向邊 map [0] [1] [2] [3] [4] 2 INF 1 5 6 3

11 鄰接串列 2 3 4 1 [0] [1] [2] [3] [4] map 無權重無向邊 struct node * map[5];
1 無權重無向邊 struct node { int id; struct node *next; }; struct node * map[5];

12 鄰接串列 [0] [1] [2] [3] [4] map 1/1 2/6 0/6 1/4 0/1 1/3 3/1 2/4 3/3 4/1
2/1 有權重無向邊 struct edge { int id; int weight; struct edge *next; }; struct edge* map[5];

13 鄰接串列 無權重有向邊 基本上跟無向的很像, 只是只會有一個方向有邊。 所以…換你畫囉~~ 有權重有向邊

14 補充:串接的方式 #include <stdlib.h>
#define NEW(T, N) (T)malloc((N) * sizeof(T) ) struct edge { int id; int weight; struct edge *next; }; int main(){ struct edge *map[5]; struct edge *ptr = 0; ptr = NEW(struct edge, 1); ptr->id = 1; ptr->weight = 1; ptr->next = NULL; map[0] = ptr; ptr->id = 2; ptr->weight = 6; map[0]->next = ptr; //… }

15 你暈了嗎? 別擔心,我們目前比較常用的是鄰接矩陣的做法。 但真正在寫軟體什麼的話,是要用鄰接串列喔!


Download ppt "101北一女中 資訊選手培訓營 圖論基礎 2012.07.08 Nan."

Similar presentations


Ads by Google