Bài toán tô màu đồ thị Phát biểu bài toán

Một phần của tài liệu Lập trình mô phỏng một số thuật toán trên đồ thị (Trang 34)

Phát biểu bài toán

Cho đồ thị GV E,  có n đỉnh. Hãy tìm cách để tô các đỉnh của đồ thị sao cho hai đỉnh bất kỳ kề nhau có màu tô khác nhau.

Để tô màu một đồ thị G, ta có thể sử dụng thuật toán Welsh-Powell

Thuật toán Welsh-Powell về tô màu đồ thị:

Bƣớc 1. Tìm bậc của đồ thị;

Bƣớc 2. Sắp xếp các đỉnh G theo bậc giảm dần;

Bƣớc 3. Dùng một màu để tô màu cho đỉnh đầu tiên có bậc cao nhất; Bƣớc 4. Tiếp tục duyệt các đỉnh của danh sách theo thứ tự đƣợc sắp, tô màu tất cả các đỉnh không kề với các đỉnh đã đƣợc tô trƣớc đó cùng màu với các đỉnh vừa đƣợc tô. Sau đó xóa tất cả các đỉnh vừa đƣợc tô khỏi danh sách;

Bƣớc 5. Lặp lại từ Bước 3. Việc tô các đỉnh trong danh sách sẽ thực hiện bằng màu khác với các màu đã đƣợc sử dụng trƣớc đó.

Bƣớc 6. Dừng lại quá trình khi danh sách rỗng.

Ví dụ: Dùng thuật toán Welsh–Powell để tô màu của đồ thị sau:

Hình 1.19 Đồ thị liên thông gồm 6 đỉnh chƣa tô màu

Bƣớc 1. Tìm bậc của các đỉnh Ta có đỉnh: V1 V2 V3 V4 V5 V6 Bậc 4 2 4 3 2 3 Bƣớc 2. Sắp xếp các đỉnh G theo bậc giảm dần Ta có đỉnh: V1 V3 V4 V6 V2 V5 Bậc 4 4 3 3 2 2

Bƣớc 3. Dùng một màu để tô màu cho đỉnh đầu tiên có bậc cao nhất

Bƣớc 4.

V3 không tô màu đỏ vì kề với V1

V4 không tô màu đỏ vì kề với V1

V6 không tô màu đỏ vì kề với V1

V2 không tô màu đỏ vì kề với V1

V5 tô màu đỏ.

Bỏ qua các đỉnh đã đƣợc tô màu, danh sách các đỉnh chƣa đƣợc tô màu theo thứ tự bậc giảm dần nhƣ sau:

V3V4 V6 V2

Bƣớc 5. Lặp lại quá trình trên với màu thứ hai

V3 tô màu vàng

V4 không tô màu vàng vì kề với V3

V6 tô màu vàng

V2 không tô màu vàng vì kề với V3

Bỏ qua các đỉnh đã đƣợc tô màu, danh sách các đỉnh chƣa đƣợc tô màu theo thứ tự bậc giảm dần nhƣ sau:

V4 V2

Lặp lại quá trình trên với màu thứ ba

V4 tô màu xanh (adsbygoogle = window.adsbygoogle || []).push({});

V2 tô màu xanh

Hình 1.20 Đồ thị liên thông 6 đỉnh sau khi đã đƣợc tô màu

Thuật toán Welsh-Powell trên chúng tôi đƣa về đoạn giả mã sau đây:

Mau:=1; i:=1; Mau(vi):=Mau; DaTo:={vi}; While (i<=n) do

Begin j:=i+1;

While (j<=n)& (vjDaTo) do Begin If vjKe(DaTo) then Begin Mau(vj):=Mau; DaTo:=DaTo{vj}; End; j:=j+1; End; i:=i+1; Mau:=Mau+1; …

Chƣơng 2. BIỂU DIỄN DỮ LIỆU VÀ THIẾT KẾ HỆ THỐNG

Một phần của tài liệu Lập trình mô phỏng một số thuật toán trên đồ thị (Trang 34)