Bài tập một số ứng dụng trong đồ thị
Bài tập 1 : Cho G=(V,E) đồ thị có hướng trong đó không có cung (s,t). Chứng minh rằng số đường đi cơ bản nối hai đỉnh s và t là bằng số ít nhất các đỉnh của đồ thị cần loại bỏ để trong đồ thị không còn đường đi nối s với ...
Bài tập 1 :
Cho G=(V,E) đồ thị có hướng trong đó không có cung (s,t). Chứng minh rằng số đường đi cơ bản nối hai đỉnh s và t là bằng số ít nhất các đỉnh của đồ thị cần loại bỏ để trong đồ thị không còn đường đi nối s với t.
Bài tập 2 :
Xây dựng thuật toán tìm tập E1 tất cả các cung của đồ thị mà việc tăng khả năng thông qua của bất kỳ cung nào trong E đều dẫn đến tăng giá trị của luồng cực đại trong mạng.
Bài tập 3 :
Cho hai dãy số nguyên dương {pi, i=1,2,…,m} và {qj, j=1,2,…,n}. Hãy xây dựng ma trận A={aij : i=1,2,…,m; j=1,2,…n} với các phần tửai j ∈ {0,1} có tổng các phần tử trên dòng i là pi , tổng các phần tử trên cột j là qj.
Bài tập 4 :
Có m chàng trai, n cô gái và k bà mối, mỗi bà mối p (p=1,2,…,k) có một danh sách Lp một số chàng trai và cô gái trong số các chàng trai và cô gái nói trên là khách hàng của bà ta. Bà mối p có thể se duyên cho bất cứ cặp trai gái nào là khách hàng của bà ta, nhưng không đủ sức tổ chức quá dp đám cưới. Hãy xây dựng thuật toán căn cứ vào danh sách Lp, dp, p=1,2,…,k; đưa ra cách tổ chức nhiều nhất các đám cưới giữa m chàng trai và n cô gái với sự giúp đỡ của các bà mối.
Bài tập 5 :
Chuyển bi
Cậu bé vẽ N (N<=100) vòng tròn, đánh số từ 1 tới N và tô màu các vòng tròn đó (có thể có các vòng tròn có màu giống nhau), sau đó nối từng cặp các cung định hướng, mỗi cung có một màu nhất định. Các màu (của cung và vòng tròn) được đánh số từ 1 đến 100.
Cậu bé chọn 3 số nguyên khác nhau L, K và Q nằm trong phạm vi từ 1 tới N, đặt vào trong các vòng tròn số L và K mỗi vòng một hòn bi, sau đó bắt đầu di chuyển bi theo nguyên tắc sau:
- Bi chỉ được chuyển theo cung có màu trùng với màu của vòng tròn chứa viên bi thứ 2.
- Bi chỉ được chuyển theo chiều cung
- Hai viên bi không được đồng thời ở cùng một vòng tròn;
- Không nhất thiết phải di chuyển lần lượt các viên bi,
- Quá trình di chuyển kết thúc, khi một trong hai viên bi tới vòng tròn Q.
Hãy lập trình xác định cách di chuyển để chấm dứt quá trình sau một số ít nhất các bước chuyển.
Dữ liệu vào từ file BL.INP:
- Dòng đầu: 4 số nguyên N L K Q
- Dòng thứ 2: N số nguyên C1, C2,…,Cn; Ci là màu vòng tròn i
- Dòng thứ 3: số nguyên M (0 < M < 10000)
- M dòng sau: mỗi dòng 3 số nguyên Ai Bi Di; xác định cung màu Di từ vòng tròn Ai tới vòng tròn Bi.
Các số trên một dòng cách nhau một dấu cách.
Kết quả đưa ra file BL.OUT:
- Dòng đầu: CO hoặc KHONG, cho biết quá trình có kết thúc được hay không,
- Nếu dòng đầu là CO thì dòng 2 chứa số nguyên xác định số bước chuyển tối thiểu .
BL.INP | BL.OUT |
5 3 4 12 3 2 1 482 1 24 1 54 5 24 5 25 1 33 2 22 3 45 3 13 5 1 | CO3 |
Bài tập 6 : Bảng điện
Một lưới ô vuông được phủ trên một bảng điện hình vuông. Vị trí nằm trên giao của 2 đường kề của lưới sẽ được gọi là nút. Tất cả có nxn nút trên lưới.
Có một số nút chứa tiếp điểm. Nhiệm vụ của bạn là cần nối các tiếp điểm với các nút ở trên biên của bảng bởi các đoạn dây dẫn (gọi là các mạch). Các mạch chỉ được chạy dọc theo các đường kẻ của lưới (nghĩa là không được chạy theo đường chéo). Hai mạch không được phép có điểm chung, vì vậy hai mạch bất kỳ không được phép cùng chạy qua cùng một đoạn đường kẻ của lưới cũng như không được chạy qua cùng một nút của lưới. Các mạch cũng không được chạy dọc theo các đoạn kẻ của lưới ở trên biên (mạch phải kết thúc khi nó gặp biên) và cũng không được chạy qua nút chứa tiếp điểm khác.
Ví dụ:
Bảng điện và các tiếp điểm được cho trong hình 2a. Nút tô đậm trong hình vẽ thể hiện vị trí các tiếp điểm.
Yêu cầu: Viết chương trình cho phép nối được một số nhiều nhất các tiếp điểm với biên. Các tiếp điểm ở trên biên đã thỏa mãn đòi hỏi đặt ra, vì thế không nhất thiết phải thực hiện mạch nối chúng. Nếu như có nhiều lời giải thì chi cần đưa ra một trong số chúng.
Dữ liệu vào:
file văn bản ELE.INP:
- Dòng đầu tiên chứa số nguyên n (3 <= n <= 15).
- Mỗi dòng trong số n dòng tiếp theo chứa n ký tự phân cách nhau bởi một dấu cách. Mỗi ký tự chỉ là 0 hoặc 1. Ký tự 1 thể hiện tiếp điểm, ký tự 0 thể hiện nút không có tiếp điểm trên vị trí tương ứng của lưới. Các nút được đánh số từ 1 đến n*n theo thứ tự từ trái sang phải, từ trên xuống dưới. Chỉ số của nút chứa tiếp điểm sẽ là chỉ số của tiếp điểm.
Kết quả:
ghi ra file ELE.OUT:
- Dòng đầu tiên chứa k là số tiếp điểm lớn nhất có thể nối với biên bởi các mạch.
- Mỗi dòng trong số k dòng tiếp theo mô tả một mạch nối một trong số k tiếp điểm với biên theo qui cách sau: đầu tiên là chỉ số của tiếp điểm được nối, tiếp đến là dãy các ký tự mô tả hướng của mạch nối: E: đông, W: tây, N: bắc, S: nam. Giữa chỉ số và dãy ký tự phải có đúng một dấu cách, còn giữa các ký tự trong dãy ký tự không được có dấu cách.
Kết quả phải được đưa ra theo thứ tự tăng dần của chỉ số tiếp điểm.
Ví dụ:
ELE.IN | ELE.OUT |
60 0 0 1 1 10 0 0 0 1 00 0 0 1 1 10 0 0 0 0 00 0 1 1 1 10 0 0 1 0 1 | 11 E16 NWN17 SE27 S28 NWWSS29 S |
Bài tập 7:
Một khóa học gồm N môn học, môn học i phải học trong ti ngày. Giữa các môn học có mối quan hệ trước/sau: có môn học chỉ học được sau khi đã học một số môn học khác. Mối quan hệ đó được thể hiện bởi một mảng hai chiều A[i, j]; i, j = 1, …, N trong đó A[i, j] = 1/0 và A[i, i] bằng 0 với mọi i, A[i, j] = 1 khi và chỉ khi môn học i phải được dạy xong trước khi học môn j (ngày kết thúc môn i phải trứơc ngày bắt đầu môn j). Môn học i phải dạy trước môn học j nếu có một dãy môn học i1, i2, …, ik sao cho a[it, it+1] = 1, 1 <= t <= k-1, i1=i và ik=j. Nếu có một nhóm các môn học từng đôi một không có quan hệ trước/sau thì trong mỗi ngày, về nguyên tắc, ta có thể học đồng thời tất cả những môn học này (nếu không vi phạm quan hệ với các môn học khác). Mảng A[i, j] được gọi là bế tắc nếu có một dãy các môn học i1, i2,…, ik, k > 1, mà môn i1 phải dạy trước môn i2, môn i2 phải dạy trước môn i3, …, môn ik-1 phải dạy trước môn ik, môn ik phải dạy trước môn i1.
Hãy viết chương trình làm các việc sau:
1. Hãy xét xem mảng A có bế tắc hay không.
2. Nếu mảng A không bế tắc, hãy tính xem khóa học có thể kết thúc trong thời gian nhanh nhất là bao nhiêu ngày.
3. Theo các học bảo đảm thời gian hoàn thành ngắn nhất ở câu 2, hãy tính xem một học sinh trong quá trình học phải học đồng thời trong một ngày nhiều nhất bao nhiêu môn.
Dữ liệu vào được cho bởi file text có tên MH.DAT trong đó số N ghi ở dòng thứ nhất, trong nhóm N dòng tiếp theo, dòng thứ i ghi N số A[i, 1], …, A[i, N] dòng cuối cùng ghi N số nguyên dượng ti không lớn hơn 30, 1 <= i <= N; N <= 30.
Kết quả ghi ra file TKB.DAT như sau: dòng thứ nhất ghi số 1/0 tùy theo mảng A bế tắc / không bế tắc. Nếu dòng thứ nhất ghi số 0, ta mới ghi tiếp kết quả câu 2 và 3.
Kết quả câu 2 ghi tiếp vào file TKB.DAT N+1 dòng như sau: dòng dầu ghi số T là số ngày tối thiểu có thể hoàn thành khóa học, tiếp theo là N dòng trong đó dòng thứ i ghi 2 số X, Y với ý nghĩa môn học thứ i học từ ngày thứ X đến ngày thứ Y (chú ý rằng Y – X = ti – 1).
Kết quả câu 3 ghi tiếp vào file TKB.DAT như sau: dòng thứ nhất ghi 2 số Z, W với ý nghĩa trong ngày Z phải học W môn (W là số nhiều nhất các môn học phải học đồng thời trong một ngày), tiếp theo là một dòng ghi tên các môn học phải học đồng thời trong ngày Z.
Trong các câu 2 và 3, có thể có nhiều lời giải tương đương chỉ cần đưa ra một lời giải.
Ví dụ 1
MH.DAT | TKB.DAT |
4 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 | 1 |
Ví dụ 2
MH.DAT | TKB.DAT |
7 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 2 8 4 10 2 3 | 0 22 1 2 3 4 1 8 12 13 22 13 14 15 17 1 2 1 3 |
Bài tập 8:
Giám đốc một công ty quyết định tổ chức buổi tiệc trà gặp gỡ toàn thể nhân viên trong công ty. Công ty đựơc tổ chức theo mô hình phân cấp lãnh đạo và mối quan hệ thủ trưởng – nhân viên tạo thành cây có gốc là giám đốc. Để đảm bảo không khí tự nhiên, giám đốc quyết định không để thủ trưởng và nhân viên dưới quyền ngồi cùng một bàn. P gọi là thủ trưởng của Q, nếu P là thủ trưởng trực tiếp của Q hoặc tồn tại dãy P1, P2, …, Pk (1 < k), sao cho P = P1, Q = Pk và Pi là thủ trưởng trực tiếp của Pi+1 (i = 1, 2, … , k -1). Tất cả mọi người trong công ty được đánh số từ 1 đến N (N là tổng số người trong công ty với giám đốc bắt đầu từ 1).
Yêu cầu:
tính số lượng bàn ít nhất cần thiết để có thể bố trí cho mọi người ngồi theo yêu cầu nêu trên và cho một phương án bố trí người ở mỗi bàn.
Dữ liệu vào:
file text COMPANY.INP, dòng đầu tiên là số nguyên m – số ghế tối đa cho một bàn, dòng thứ 2 – số nguyên N – số người trong công ty, dòng thứ ba (và các dòng sau nếu cần) là dãy số nguyên, các số cách nhau ít nhất một dấu cách hoặc nhóm ký tự xuống dòng, số nguyên thứ i trong dãy cho biết ai là thủ trưởng trực tiếp của nhân viên i. Giám đốc không có thủ trưởng nên số này bằng 0. 2 <= m <= 10, 1 <= N <= 200.
Kết quả:
đưa ra file text COMPANY.OUT, dòng đầu tiên là số bàn ít nhất cần thiết, các dòng sau mỗi dòng tương ứng với một bàn và chứa dãy số nguyên xác định ai được bố trí ngồi sau bàn đó.
Ví dụ:
COMPANY.INP
4
13
0 1 9 9 9 2 2 1 1 7 8 8 10
File kết quả COMPANY.OUT có thể có nội dung:
5
13 3 4 5
10 6 8
7 9 11 12
2
1
Bài tập 9:
Trên bàn cờ NxN, hãy tìm cách sắp xếp số lượng tối đa các con hậu sao cho không con nào có thể ăn con nào.
Bài tập 10:
Cho 1 đồ thị có hướng G, hãy tìm một tập hợp X0 ít nhất các đỉnh của G sao cho mọi đỉnh i của G hoặc thuộc X0 hoặc i nối trực tiếp với định j thuộc X0.
Bài tập 11:
Trên bàn cờ NxN, hãy tìm cách sắp xếp số lượng tối thiểu các con hậu sao cho mọi ô cờ trên bàn cờ bị chiếu bởi ít nhất 1 con.
Bài tập 12:
Một ký túc xá có 15 cô gái. Hàng ngày các cô đi chơi với nhau theo bộ 3. Hỏi có thể đưa các cô đi chơi trong tối đa bao nhiêu ngày để không có 2 cô nào đi chung trong một bộ 3 quá 1 lần.
Hãy tổng quát hóa bài toán.
Bài tập 13:
Một số hải cảng x1, x2, x3… có các mặt hàng mà các hải cảng y1, y2, y3…cần đến. Lượng hàng có ở xi là si và yêu cầu hàng hóa của yi là di. Nếu có tàu đi từ xi tới yj thì ta ký hiệu cij là tổng lượng hàng mà các tàu có thể vận chuyển từ xi tới yj. Vậy có thể thỏa mãn mọi yêu cầu không? Tổ chức vận chuyển ra sao? Hãy viết chương trình giải quyết bài toán trên.
Bài tập 14:
Trong một cuộc du lịch, m gia đình phân nhau đi trên n xe. Các gia đình tương ứng có r1, r2, …, rm người và các xe tương ứng có s1, s2, …, sn chỗ ngồi. Hãy tìm cách phân phối sao cho 2 người cùng gia đình không ngồi chung một xe hoặc cho biết không thể làm như vậy.
Bài tập15:
Trong một trường trung học, mỗi học sinh nữ có m bạn nam và mỗi học sinh nam có m bạn nữ. Hãy chỉ ra cách sắp xếp để mỗi cô gái có thể lần lượt khiêu vũ với các bạn trai của mình và các chàng trai có thể lần lượt khiêu vũ với các bạn gái của mình.
Bài 16:
Một nhà in phải sản xuất n cuốn sách bằng 2 máy: một để in, một để đóng sách. Gọi ak là thời gian cần cho việc in cuốn thứ k và bk là thời gian cần cho việc đóng cuốn đó. Tất nhiên là sách phải in xong mới đóng, do đó máy đóng có thể phải chờ đợi lâu hay chóng. Vậy tiến hành theo thứ tự nào để có thể xong việc sớm nhất.
Bài tập 17: Ổn định
Trong một lớp có N dãy bàn và mỗi dãy có M chỗ ngồi. Trong lớp có K cán sự lớp. Mỗi một cán sự cầm một đề bài tập. Các cán sự này có nhiệm vụ chuyển đề bài tập đến các học sinh khác ngồi kề mình ở phía trước, sau, trái và phải. Sau khi các cán sự làm xong công việc của mình, mỗi học sinh thông báo số lượng đề bài tập mình đã nhận được. Dựa trên thông tin này hãy xác định vị trí của các cán sự trong lớp.
Bài tập 18:
Có một máy thu và một máy phát tín hiệu. Giả sử máy phát có thể phát đi 5 loại tín hiệu khác nhau a, b, c, d, e. Ở máy thu mỗi tín hiệu có thể được hiểu theo 2 cách khác nhau: tín hiệu a có thể hiểu p hay q, tín hiệu b có thể hiểu q hay r, ... Số cực đại các tín hiệu mà ta có thể sử dụng là bao nhiêu để cho ở máy thu không xảy ra nhầm lẫn giữa các tín hiệu được sử dụng.