cpp-093Đọc toàn bộ đề miễn phí

Biến đổi từ vựng Word Ladder: BFS hai đầu (Bidirectional BFS)

Cho từ bắt đầu start, từ đích target và một tập từ điển gồm N từ có cùng độ dài L. Mỗi bước biến đổi chỉ được phép thay đổi đúng 1 ký tự và từ mới tạo thành phải nằm trong tập từ đ…

C++Nâng cao45 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

graphsbfsbidirectional bfsstrings

Kiến thức tiên quyết: bfs, hash table.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu kỹ thuật duyệt BFS hai đầu (Bidirectional BFS): Mở rộng đồng thời từ đỉnh nguồn và đỉnh đích để giảm không gian tìm kiếm từ O(BD) xuống O(BD/2).
  • Xây dựng cạnh kề động trên xâu: Thay vì so sánh mọi cặp từ (O(N2 · L)), thử thay đổi từng ký tự trong 26 chữ cái (O(26 · L)) rồi tra cứu trong bảng băm.

Mô tả bài toán

Cho từ bắt đầu start, từ đích target và một tập từ điển gồm N từ có cùng độ dài L. Mỗi bước biến đổi chỉ được phép thay đổi đúng 1 ký tự và từ mới tạo thành phải nằm trong tập từ điển. Hãy tìm số lượng từ ít nhất trong chuỗi biến đổi từ start đến target (bao gồm cả start và target). Nếu không thể biến đổi, in ra 0.

Quy ước nộp bài

  • Chỉ cần viết một chương trình đọc stdin và in ra stdout. Bài này không yêu cầu viết hàm.
  • Không dùng cout để in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vào stdout và làm bài sai.
  • Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
  • Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.

Input

  • Dòng 1: Chứa 2 từ start và target cách nhau bởi dấu cách (1 ≤ L ≤ 10).
  • Dòng 2: Một số nguyên N (1 ≤ N ≤ 5000).
  • N dòng tiếp theo: Mỗi dòng chứa một từ trong từ điển.

Output

  • In ra số từ trong chuỗi biến đổi ngắn nhất, hoặc 0 nếu không tới được.

Ràng buộc

  • 1 ≤ N ≤ 5000, 1 ≤ L ≤ 10.
  • Thời gian: 1000ms. Bộ nhớ: 256MB.

Ví dụ 1

Input

hit cog
6
hot
dot
dog
lot
log
cog

Output

5
*Giải thích: Chuỗi biến đổi ngắn nhất là: hit -> hot -> dot -> dog -> cog gồm 5 từ.*
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.