Biểu diễn danh sách kề cho đồ thị 1 2.. Biểu diễn ma trận kề cho đồ thị sau... Dòng đầu tiên: số đỉnh của đồ thị 2.. Mỗi dòng chứa n số nguyên ứng với giá trị trong ma trận kề... T ổ ng
Trang 1C ấ u trúc d ữ li ệ u cho đ ồ th ị
Ma trận kề:
- Biểu diễn đồ thị G=(V,E) bằng ma trận kề |V|
với N hàng, N cột với các giá trị 0,1
|V|= 0 Nếu không tồn tại cạnh giữa vivj
1 Nếu tồn tại cạnh giữa vivj
- Đồ thị có thị có trọng số: Giá trị của ma trận kề
gồm trọng số của các cạnh
Trang 2C ấ u trúc d ữ li ệ u cho đ ồ th ị
Ví dụ: Biểu diễn ma trận kề cho các đồ thị sau
Trang 3C ấ u trúc d ữ li ệ u cho đ ồ th ị
Danh sách kề:
- Biểu diễn đồ thị G=(V,E) bằng danh sách kề |V| là
một mảng 1 chiều có size N, trong đó mỗi đỉnh tương đương 1 danh sách liên kết
Trang 4C ấ u trúc d ữ li ệ u cho đ ồ th ị
Bài tập:
1 Biểu diễn danh sách kề
cho đồ thị 1
2 Biểu diễn ma trận kề cho
đồ thị sau
Trang 5C ấ u trúc d ữ li ệ u cho đ ồ th ị
Cài đặt ma trận kề:
#define max 100
struct Graph
{
int n;
int a[max][max];
};
Định dạng dữ liệu: Dữ liệu vào ma trận kề được
lưu ở file: 1 Dòng đầu tiên: số đỉnh của đồ thị
2 Mỗi dòng chứa n số nguyên ứng với giá trị trong ma trận kề
Trang 6C ấ u trúc d ữ li ệ u cho đ ồ th ị
Đọc ma trận kề từ file:
void Matranke (Graph &g)
{ char file[128];
printf(“Tap tin nguon (Dothi.txt)”);
gets(file);
if (strcmp(file,””)==0)
strcpy(file,”Dothi.txt”);
FILE *f;
f = fopen(file,”rt”);
Trang 7C ấ u trúc d ữ li ệ u cho đ ồ th ị
if ( f==NULL)
{ printf(“Khong mo duoc file”);
exit(0);
}
fscanf(f,”%d”,&g.n);
for (int i=0;i<g.n;i++)
for (int j =0;j<g.n;j++)
fscanf (f,”%d”,&g.a[i][j]);
fclose(f);
}
Trang 8THU Ậ T TOÁN DUY Ệ T
Trang 9T ổ ng quan
Duyệt hay tìm kiếm trên đồ thị: ghé qua mỗi đỉnh trong đồ thị một cách có hệ thống
- Duyệt đồ thị không phụ thuộc vào hướng của cạnh
Có 2 cách duyệt đồ thị:
- Duyệt theo chiều sâu ( Depth-first)
- Duyệt theo chiều rộng (Breadth-first)
Trang 10Duy ệ t theo chi ề u sâu
Duyệt theo chiều sâu: Mỗi lần duyệt một đỉnh ta duyệt đến tận cùng mỗi nhánh rồi mới chuyển sang duyệt nhánh khác
Ví dụ:
A
B
D
H
C
E
G
F
1
5
7 6
8
Thứ tự duyệt: A, B, D, H, E, F, G, C