Tải bản đầy đủ (.pdf) (10 trang)

Cấu trúc dữ liệu và giải thuật (phần 16) pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (292.36 KB, 10 trang )

C
C


u tr
u tr
ú
ú
c d
c d


li
li


u cho đ
u cho đ


th
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 v
i
v
j


1 Nếu tồn tại cạnh giữa v
i
v
j
- Đồ 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
C
C


u tr
u tr
ú
ú
c d
c d


li
li


u cho đ
u cho đ


th
th



Ví dụ: Biểu diễn ma trận kề cho các đồ thị sau
1 2 3 4 5
1
0 1 1 0 0
2
1 0 1 1 0
3
1 1 0 0 1
4
0 1 0 0 1
5
0 0 1 1 0
1 2 3 4 5
1
0 1 1 0 0
2
1 0 0 0 0
3
0 1 0 0 0
4
0 0 1 0 1
5
0 1 0 1 0
C
C


u tr
u tr
ú

ú
c d
c d


li
li


u cho đ
u cho đ


th
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
C
C


u tr
u tr
ú
ú
c d

c d


li
li


u cho đ
u cho đ


th
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
C
C


u tr
u tr
ú
ú
c d
c d



li
li


u cho đ
u cho đ


th
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ề
C
C


u tr

u tr
ú
ú
c d
c d


li
li


u cho đ
u cho đ


th
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”);
C
C



u tr
u tr
ú
ú
c d
c d


li
li


u cho đ
u cho đ


th
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);
}
THU
THU


T TO
T TO
Á
Á
N DUY
N DUY


T
T
Đ
Đ


TH
TH


T
T


ng quan
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)
Duy
Duy


t theo chi
t theo chi


u sâu
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
2
3
4
5
7
6
8
Th

t

duy

t: A, B, D, H, E, F, G, C

×