Ví dụ về duyệt đồ thị ưu tiên chiều sâu DFS và ứng dụng Đồ thị ví dụ: Nguyễn Hữu Tuân vimaru.edu.vn Hình 1: Đồ thị vô hướng có 8 đỉnh Với đồ thị trên,

Tài liệu tương tự
Chương trình dịch

Animation, Modules 6 - Hoạt hình, tách file

Bài 7. Con trỏ Mục tiêu: 1. Luyện tập sử dụng con trỏ và địa chỉ của các biến 2. Sử dụng con trỏ khi thao tác với mảng. Giới hạn: không dùng các thư v

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

Chiến lược kiểm thử Chiến lược kiểm thử Bởi: Khoa CNTT ĐHSP KT Hưng Yên Các công đoạn kiểm thử Quá trình kiểm thử có thể chia làm các giai đoạn : Kiểm

Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Lập trình và ngôn ngữ lập trình

Microsoft PowerPoint - 02_Address_Book

Template and Exception Template and Exception Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++,

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

Lớp và đối tượng-các hàm và các lớp friend Lớp và đối tượng-các hàm và các lớp friend Bởi: Thanh Hiền Vũ CÁC HÀM VÀ CÁC LỚP friend Một hàm friend của

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 13. Hàm Nội dung 1. Khái niệm hàm 2. Khai báo và sử dụn

CHUYÊN ĐỀ 7 KIỂM ĐỊNH CHẤT LƯỢNG GIÁO DỤC VÀ ĐÁNH GIÁ NGOÀI TRƯỜNG MẦM NON ThS. Hồ Đắc Thụy Thiên Thi

Kiểu dữ liệu văn bản Kiểu dữ liệu văn bản Bởi: PGS. TS. NGƯT Phạm Văn Huấn Ngoài những dữ liệu số như các số nguyên, số thực, máy tính còn có thể lưu

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 9. Vào ra dữ liệu trong C Các lệnh vào ra dữ liệu C cun

Slide 1

CÔNG BÁO/Số /Ngày BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIÁO DỤC VÀ ĐÀO TẠO Số: 14/2018/TT-BGDĐT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập -

Microsoft Word - su_dung_sqlite_voi_php.docx

Microsoft Word - 3.QC tiep nhan, xu ly quan ly VB(R.1).doc

TRƯỜNG ĐẠI HỌC TÀI CHÍNH- MARKETING

Tài liệu Hướng dẫn sử dụng

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

Quyết định số 218/2000/QĐ-BTC ngày 29/12/2000

PowerPoint Presentation

THƯ VIỆN PHÁP LUẬT

Chương II - KIẾN TRÚC HỆ ĐIỀU HÀNH

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Quy_che_quan_tri_Cty_KHP.doc

MỘT SỐ LƯU Ý KHI DẠY CÁC TIẾT ÔN TẬP CHƯƠNG Môn Tin học cung cấp cho học sinh những kiến thức phổ thông về ngành khoa học tin học, hình thành và phát

Microsoft Word - bo_tien_xu_ly_trong_c.docx

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Mảng và xâu kí tự Nội dung 1. Mảng 2. Xâu kí tự 2 1

[HDSD] - Tìm kiếm

Hãy chọn phương án đúng CÂU HỎI TRẮC NGHIỆM TIN HỌC 7 HK1 Câu 1: Bảng tính thường được dùng để: a. Tạo bảng điểm của lớp em b. Bảng theo dõi kết quả h

HỘI THI TIN HỌC TRẺ TỈNH AN GIANG ĐỀ CHÍNH THỨC ĐỀ THI LÝ THUYẾT BẢNG A - KHỐI TIỂU HỌC Khóa ngày: Thời gian : 20 phút (không kể thời gian

Công Ty Công Nghệ Tin Học Mũi Tên Vàng Địa chỉ: Số 7 Nam Quốc Cang, Quận 1, TP HCM Điện thoại: Hotline: Website:

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

QUY ĐỊNH HỌC PHẦN THỰC TẬP TỐT NGHIỆP ĐỐI VỚI SINH VIÊN CÁC HỆ ĐẠI HỌC LOẠI HÌNH ĐÀO TẠO CHÍNH QUY (Ban hành kèm theo Quyết định số: 1206 /QĐ-HVTC ngà

Bài giảng Tổ chức sản xuất Người soạn: Trương Hạnh Ly - 1 -

BỘ VĂN HÓA, THỂ THAO VÀ DU LỊCH TRƯỜNG ĐẠI HỌC VĂN HÓA TP. HỒ CHÍ MINH & QUY CHẾ HỌC VỤ Tài liệu dành cho sinh viê

Phương pháp biểu diễn thuật toán Phương pháp biểu diễn thuật toán Bởi: Khoa CNTT ĐHSP KT Hưng Yên Khi chứng minh hoặc giải một bài toán trong toán học

In trực tuyến 4.0

Microsoft Word - PQLKSTL.DOC

OpenStax-CNX module: m Giới thiệu về ngôn ngữ C và môi trường turbo C 3.0 ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licens

PowerPoint Presentation

TRƯỜnG ĐẠI HỌC BÁCH KHOA HÀ nội VIỆn CÔnG nghệ THÔnG TIn VÀ TRUYỀn THÔnG TIN HỌC ĐẠI CƯƠNG Bài 10. Các cấu trúc lập trình trong C Nội dung 1. Cấu trúc

Chương 1:

QUY CHẾ CÔNG BỐ THÔNG TIN CÔNG TY CỔ PHẦN ĐẠI LÝ GNVT XẾP DỠ TÂN CẢNG (Ban hành kèm theo Quyết định số: 192A/QĐ-HĐQT ngày 23 tháng 3 năm 2016 của Chủ

CÔNG BÁO/Số /Ngày BỘ TÀI CHÍNH BỘ TÀI CHÍNH Số: 212/2014/TT-BTC CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc

Gia sư tiểu học CHUẨN KIẾN THỨC, KĨ NĂNG MÔN TOÁN LỚP 1 (Tuần 1 35) TUẦN: 1 Từ 24/8 đến 28/8 LỚP Tiết Tên bài dạy Yêu cầu c

BỘ GIÁO DỤC VÀ ĐÀO TẠO Số: 155/QĐ-BGDĐT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập Tự do Hạnh phúc Hà Nội, ngày 10 tháng 01 năm 2013 QUYẾT ĐỊNH Ban hà

PHẦN 8: LỊCH TUẦN I. Giới thiệu: Chương trình lịch tuần với các tính năng như sau: Lịch chạy trên giao diện WEB với CSDL chạy tập trung. Theo dõi lịch

PHẦN II

50. Làm cách nào để người ta ngoan ngoãn bước vào trại tù mặc dù không biết trước ngày về? Đó là câu hỏi mà nhiều người không bị nếm mùi «học tập cải

Hướng dẫn sử dụng Phần mềm Quản lý Đoàn viên

HƯỚNG DẪN CHUYỂN KHOẢN VÀ THANH TOÁN HÓA ĐƠN

Phân tích hình tượng nhân vật người anh hùng Quang Trung

Microsoft Word - Van pháp ti?ng Vi?t.doc

Quy Trình Làm Hàng Xuất Khẩu Đường Biển

PHÒNG GD&ĐT CÀ MAU

Những sự thật bên trong Vụ Án Trịnh Vĩnh Bình. Nguyễn Quang Duy Đài VOA vừa đưa tin ông Trịnh Vĩnh Bình thắng kiện, Hà Nội phải bồi thường 37,5 triệu

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

PHỤ LỤC II BIỂU CAM KẾT CỦA MA-LAI-XIA (Bản dịch không chính thức của Vụ Chính sách thương mại đa biên, Bộ Công Thương)


Chuỗi Chuỗi Bởi: phamvanviet truonglapvy Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long, có đầy đủ tính chất mềm dẻo, mạnh mẽ và

Bài 1 Nội dung chính trong bài: Khám phá những công cụ vẽ cải tiến Lệnh Copy và Paste Motion Tìm hiểu tính năng nhập và xuất thành video cải tiến Sử d

Microsoft Word - danh-sach-lien-ket-doi-trong-c.docx

Microsoft Word - Bai 7.1.docx

Microsoft Word - Tin hoc dai cuong 2015

BÄÜ GIAÏO DUÛC VAÌ ÂAÌO TAÛO

9-KiemThu

BỘ GIÁO DỤC VÀ ĐÀO TẠO VIỆN KHOA HỌC GIÁO DỤC VIỆT NAM NGUYỄN ANH THUẤN ĐÁNH GIÁ CHẤT LƯỢNG QUẢN LÝ DẠY - HỌC CỦA NGƯỜI HIỆU TRƯỞNG TRƯỜNG TRUNG HỌC C

Slide 1

Slide 1

VnDoc - Tải tài liệu, văn bản pháp luật, biểu mẫu miễn phí Câu hỏi trắc nghiệp địa lý lớp 10: Chương địa lý công nghiệp Câu 1) Công nghiệp có vai trò

CÁC CHỦ BIỆT THỰ FLAMINGO Số: 01/2016 (V/v: giải quyết các vấn đề liên quan đến quyền sở hữu, sử dụng biệt thự khai thác chương trình BTVV) CỘNG HÒA X

UBND THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THỦ ĐỨC ĐẠO ĐỨC TRI THỨC KỸ NĂNG SỔ TAY HỌC SINH SINH VIÊN HỌC KỲ I, NĂM HỌC Đào tạo ng

TRẢ LỜI KIẾN NGHỊ CỬ TRI SAU KỲ HỌP THỨ 3 HĐND TỈNH KHÓA IX ĐƠN VỊ: THÀNH PHỐ THỦ DẦU MỘT 1. Cử tri phường Định Hòa phản ánh: Quỹ quốc phòng an ninh k

Bảo hiểm tai nạn của học sinh giờ đây có ý nghĩa quan trọng hơn bao giờ hết! Năm học Mặc dù quý vị đã nỗ lực hết sức để bảo vệ con em mình,

Microsoft Word - Du thao bao cao DHCD 2017

Microsoft Word - Tom tat Luan van - Nguyen Thi Ngoc Quynh.doc

CHUẨN THIẾT YẾU QUỐC TẾ VỀ CHẤT LƯỢNG Y TẾ VÀ AN TOÀN CHO NGƯỜI BỆNH

BỘ TÀI CHÍNH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc Số: 74/2015/TT-BTC Hà Nội, ngày 15 tháng 05 năm 2015 THÔNG TƯ HƯỚNG DẪN VI

Tạp chí KHOA HỌC ĐHSP TPHCM Số 54 năm 2014 PHƯƠNG PHÁP SỬ DỤNG TRÒ CHƠI TRONG DẠY HỌC NGUYỄN THỊ BÍCH HỒNG * TÓM TẮT Bài viết trình bày phương pháp sử

Microsoft Word - QUI CHE QUAN TRI NOI BO CTY.doc

Bài tập chương 1 ngôn ngữ lập trình visual basic Bài tập chương 1 ngôn ngữ lập trình visual basic Bởi: Khoa CNTT ĐHSP KT Hưng Yên MỤC TIÊU: SAU KHI HO

TCVN

Phân tích đoạn trích Trao duyên của truyện kiều

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐH KHOA HỌC TỰ NHIÊN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc QUY CHẾ TẠM THỜI VỀ QUẢN TRỊ TÀI SẢ

BỘ TÀI CHÍNH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐH TÀI CHÍNH - MARKETING Độc lập- Tự do- Hạnh phúc Số: 654/QĐ-ĐHTCM TP. Hồ Chí Minh, ngày 03 th

TÓM TẮT HƢỚNG DẪN SỬ DỤNG CHƢƠNG TRÌNH HỌC TIẾNG ANH TRỰC TUYẾN ENGLISH DISCOVERIES ONLINE

0. Hướng dẫn sử dụng phần mềm chấm công

ĐỀ cương chương trình đẠi hỌc

Chứng từ điện tử đa mục đích phụ thuộc EMD-A thu phí HLTT Trang: 1/27 Hướng dẫn xuất EMD-A thu phí Hành lý trả trước tại tổng đại lý và đại lý sử dụng

Slide 1

Microsoft Word - HD SD CD T-88

Thuyết minh về một thắng cảnh quê em – Văn Thuyết minh 9

BỘ ĐỀ THI TUYỂN CÔNG CHỨC NĂM 2017 MÔN THI: TRẮC NGHIỆM NGHIỆP VỤ CHUYÊN NGÀNH TÀI CHÍNH KẾ TOÁN (Mã: TACH_ 400 câu) Câu 1: Theo Điều 55 của Luật Kế t

Viện Đại học Mở Hà Nội Trung tâm Đào tạo Trực tuyến (E-Learning) Tài liệu hướng dẫn học viên TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HỆ THỐNG ĐÀO TẠO TRỰC TUYẾN Dà

Bản ghi:

Đồ thị ví dụ: Hình 1: Đồ thị vô hướng có 8 đỉnh Với đồ thị trên, file dữ liệu biểu diễn (graph_dfs1.txt) ở dạng ma trận kề sẽ là: 8 0 1 0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 Sau đây là chương trình (graph_dfs1.cpp) đọc đồ thị biểu diễn ở dạng ma trận kề (từ bàn phím hoặc từ file), sau đó duyệt đồ thị bằng thuật toán duyệt ưu tiên chiều sâu DFS. // Graph traversal using DFS // Author: Nguyen Huu Tuan, huu-tuan.nguyen@vimaru.edu.vn // Lecturer at the FIT, Vietnam Maritime University // Date: 14/10/2015 // Require: C++ 11 supported compiler #include <iostream> // for cin, cout #include <fstream> // for file stream #include <vector> // for vector using namespace std; // cai dat DFS bang ma tran ke void DFS(vector<vector<int>> & vvi); // duyet do theo chieu sau void DFS_visit(vector<vector<int>> & vvi, int v); // duyet do theo chieu sau bat dau tu dinh v void print_path(int v, int u); 1

int TIME; vector<int> visited; // mang danh dau da den tham chua vector<int> p; // mang luu dinh truoc vector<int> d; // mang luu thu tu den tham int WHITE = 0; // chua tham int GREY = 1; // dang tham int BLACK = 2; // da tham xong int main(int argc, char * argv[]) // argc: argument count, argv: argument values int n; vector<vector<int>> vvi(n, vector<int>(n, 0)); int i, j; if (argc > 1) if (atoi(argv[1]) == 0) cout << "Nhap so dinh cua do thi n="; cin >> n; for (j = i + 1; j < n; j++) cout << "Nhap a[" << i << "][" << j << "]="; cin >> vvi[i][j]; else if (argc == 3) ifstream fin(argv[2]); // mo file fin >> n; for (j = 0; j < n; j++) fin >> vvi[i][j]; fin.close(); // dong file DFS(vvi); // duyet do thi for (auto & it : p) // in mang p cout << it << ", "; 2

cout << endl; for (auto & it : d) // in mang d cout << it << ", "; else cout << "Chay chuong trinh nhu sau:<ten chuong trinh> <0:nhap tu ban phim,1: nhap tu file> <ten file>"; return 0; void DFS(vector<vector<int>> & vvi) TIME = 1; int n = vvi.size(); // dinh cua do thi // khoi tao p = vector<int>(n, -1); d = vector<int>(n, -1); visited = vector<int>(n, WHITE); for (int v = 0; v < n; v++) if (WHITE == visited[v]) // v chua duoc tham DFS_visit(vvi, v); void DFS_visit(vector<vector<int>> & vvi, int v) visited[v] = GREY; int n = vvi.size(); d[v] = TIME++; // thu tu den tham dinh v for (int u = 0; u < n; u++) // xet cac dinh ke voi v if ((vvi[v][u] > 0) && (WHITE == visited[u])) // va chua duoc tham p[u] = v; // v la dinh truoc khi den u DFS_visit(vvi, u); visited[v] = BLACK; Lệnh để chạy chương trình trên với file dữ liệu ví dụ là: graph_dfs1 1 graph_dfs1.txt. Sau đây là ví dụ (graph_dfs2.cpp) duyệt đồ thị theo chiều sâu để đếm số thành phần liên thông của đồ thị, in ra các đỉnh thuộc về các thành phần liên thông và in ra đường đi từ một đỉnh tới một đỉnh khác. Để thực hiện điều này ta sẽ thay đổi mã lệnh của chương trình graph_dfs1: trong hàm DFS() mỗi lần gọi tới DFS_visit() ta sẽ có 1 thành phần liên thông và lưu vào biến comp (tăng lên 1). Mảng d sẽ được sử dụng để đánh dấu các đỉnh thuộc về cùng một thành phần liên thông. Tiếp đến để in đường đi ta sẽ dùng hàm đệ qui print_path(v, u), ban đầu in đường đi từ v tới p[u], sau đó in u. 3

// Graph traversal using DFS // Counting connected components of a graph and finding vertices of each component // And print path between two vertices // Author: Nguyen Huu Tuan, huu-tuan.nguyen@vimaru.edu.vn // Lecturer at the FIT, Vietnam Maritime University // Date: 14/10/2015 // Require: C++ 11 supported compiler #include <iostream> // for cin, cout #include <fstream> // for file stream #include <vector> // for vector using namespace std; // cai dat DFS bang ma tran ke void DFS(vector<vector<int>> & vvi); // duyet do theo chieu sau void DFS_visit(vector<vector<int>> & vvi, int v); // duyet do theo chieu sau bat dau tu dinh v void print_path(int v, int u); int TIME; vector<int> visited; // mang danh dau da den tham chua vector<int> p; // mang luu dinh truoc vector<int> d; // mang luu thu tu den tham int WHITE = 0; // chua tham int GREY = 1; // dang tham int BLACK = 2; // da tham xong int comp = 0; // dem do thanh phan lien thong int main(int argc, char * argv[]) // argc: argument count, argv: argument values int n; vector<vector<int>> vvi(n, vector<int>(n, 0)); int i, j; if (argc > 1) if (atoi(argv[1]) == 0) cout << "Nhap so dinh cua do thi n="; cin >> n; for (j = i + 1; j < n; j++) cout << "Nhap a[" << i << "][" << j << "]="; cin >> vvi[i][j]; 4

else if (argc == 3) ifstream fin(argv[2]); // mo file fin >> n; for (j = 0; j < n; j++) fin >> vvi[i][j]; fin.close(); // dong file endl; else DFS(vvi); // duyet do thi cout << "So thanh phan lien thong cua do thi la: " << comp << endl; for (int i = 0; i < comp; i++) // in thanh phan lien thong thu i cout << "Cac dinh thuoc thanh phan lien thong thu " << i << ":" << for (int v = 0; v < n; v++) if (d[v] == i + 1) cout << v << ", "; cout << endl; print_path(0, 2); // in duong di tu dinh 0 toi dinh 2 cout << "Chay chuong trinh nhu sau:<ten chuong trinh> <0:nhap tu ban phim,1: nhap tu file> <ten file>"; return 0; void DFS(vector<vector<int>> & vvi) TIME = 1; int n = vvi.size(); // dinh cua do thi // khoi tao p = vector<int>(n, -1); d = vector<int>(n, -1); visited = vector<int>(n, WHITE); 5

for (int v = 0; v < n; v++) if (WHITE == visited[v]) // v chua duoc tham comp++; // tang so thanh phan lien thong len 1 DFS_visit(vvi, v); void DFS_visit(vector<vector<int>> & vvi, int v) visited[v] = GREY; int n = vvi.size(); d[v] = comp; // dinh v thuoc ve thanh phan lien thong thu comp for (int u = 0; u < n; u++) // xet cac dinh ke voi v if ((vvi[v][u] > 0) && (WHITE == visited[u])) // va chua duoc tham p[u] = v; // v la dinh truoc khi den u DFS_visit(vvi, u); visited[v] = BLACK; void print_path(int v, int u) if (p[u] == v) cout << v << "->" << u; else print_path(v, p[u]); cout << "->" << u; Lưu ý chạy chương trình từ giao diện console (dòng lệnh) và phải có file dữ liệu cho phần nhập từ file. Dịch bằng Orwell DevCpp (http://sourceforge.net/projects/orwelldevcpp/files/portable%20releases/). Các bài tập khác các bạn có thể làm để luyện tập để áp dụng DFS: + Kiểm tra có tồn tại chu trình xuất phát từ một đỉnh hay không? + Sắp xếp topo 6