Mộtsốvấn ñề kháctrong ñồ thị (Tự ñọc)(Tự ñọc) Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính – Khoa CNTT ðại Học Công Nghệ - ðHQGHN Email: vinhioi@yahoo.com Cây tìm kiếm nhị phân cân bằng AVL (G.M. Adelson-Velsky and E.M. Landis) ðường ñi ngắn nhất giữa mọi cặp ñỉnh Input: ðồ thị G = (V, E) Output: Ma trận Dist[u,v] là ñường ñi ngắn nhất giữa hai ñỉnh u và v Thuật toán Floyd: for ( u = 0 ; u < n ; u++) for ( v = 0 ; v < n ; v++)for ( v = 0 ; v < n ; v++) Dist[u][v] = weight[u][v]; for ( k = 0 ; k < n ; k++) for ( u = 0 ; u < n ; u++) for ( v = 0 ; v < n ; v++) if (Dist[u][k] + Dist[k][v] < Dist[u][v] ) Dist[u][v] = Dist[u][k] + Dist[k][v] Cây bao trùm ngắn nhất (minimum spanning tree) • ðồ thị không hướng G = (V, E), cây bao trùm T là ñồ thị con của G, liên thông, không chu trình và nối tất cả các ñỉnh V của G • Cây bao trùm ngắn nhầt là cây có tổng ñộ dài các cạnh ngắn nhất 0 1 3 4 2 5 3 1 6 5 2 8 0 1 3 4 2 5 3 1 6 5 2 7 8 9 4 Cây bao trùm ngắn nhất (minimum spanning tree) Prim(G,T) //Xây dựng cây bao trùm ngắn nhất T của ñồ thị G { U = {s}; //Khởi tạo tập U chỉ chưa một ñỉnh s T = ∅; // Khởi tạo tập cạnh T rỗng. while ( U ≠ V )while ( U ≠ V ) { chọn (u,v) là cạnh ngắn nhất với u ∈ U và v ∈ V - U; U = U ∪ {v}; T = T ∪ {(u,v}; } } 8 0 1 3 4 2 5 3 1 6 5 2 7 8 9 4 (a) 8 0 1 3 4 2 5 3 1 6 5 2 7 8 9 4 (b) 8 0 3 4 5 3 1 6 5 7 8 9 4 8 0 3 4 5 3 1 67 8 9 4 8 1 2 5 2 8 (c) 8 1 3 2 5 6 5 2 7 8 (d) 8 0 1 3 4 2 5 3 1 6 5 2 7 8 9 4 (e) 8 0 1 3 4 2 5 3 1 6 5 2 7 8 9 4 (f) . Một số vấn ñề khác trong ñồ thị (Tự ñọc)(Tự ñọc) Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính – Khoa. Cây bao trùm ngắn nhất (minimum spanning tree) • ðồ thị không hướng G = (V, E), cây bao trùm T là ñồ thị con của G, liên thông, không chu trình và nối tất