Trò chơi được cho bởi một bảng gồm m hàng và n cột, các hàng được đánh số từ 1 đến m (từ trên xuống), các cột được đánh số từ 1 đến n (từ trái sang phải). Ô nằm giao giữa hàng i và cột j là ô (i, j). Mỗi ô được tô một màu có mã màu là một ký tự thuộc tập ['A', 'B', ..., 'Z'], các ô chứa món quà tô màu có mã màu là ký tự *. Nhiệm vụ của người chơi là: xuất phát từ một ô (x, y) cần tìm đường đi tới một ô chứa món quà theo quy tắc di chuyển như sau:
- Chỉ di chuyển sang các ô chung cạnh;
- Nếu di chuyển sang ô mới cùng màu với ô hiện tại thì không mất chi phí di chuyển, còn nếu di chuyển sang ô mới khác màu với ô hiện tại thì mất chi phí là 1.
Yêu cầu: Cho bảng ký tự biểu diễn trò chơi và ô (x, y), hãy tính chi phí di chuyển ít nhất của đường đi từ ô (x, y) đến một ô ký tự *.
Dữ liệu:
- Dòng đầu chứa ba số nguyên dương m, n, Q;
- m dòng tiếp theo, mỗi dòng chứa một xâu độ dài n mô tả bảng ký tự là mã màu của các ô;
- Q dòng tiếp theo, mỗi dòng chúa hai số nguyên x, y.
Kết quả:
Gồm Q dòng, mỗi dòng ghi một số nguyên là chi phí di chuyển ít nhất của đường đi từ ô (x, y) đến một ô chứa ký tự *.
Ràng buộc:
- Có 40% số test tương ứng với 40% số điểm thỏa mãn điều thỏa mãn điều kiện m, n <= 10^2; Q = 1;
- Có 40% số test khác tương ứng với 40% số điểm thỏa mãn điều kiện m, n <= 10^3, Q <= 3;
- Có 20% số test khác tương ứng với 20% số điểm còn lại có m, n <= 10^3 ; Q <= m x n.
Ví dụ:
- Input
*ADFEB AD*CFB ACBADA AAAAAA 3 6 1 6 1 5
- Output
1 2 3
Chào mọi người, đến dịp sắp thi học sinh giỏi em lại ngoi lên tìm kiếm sự giúp đỡ ^_^, bài này em làm theo Dijkstra thì bị quá thời gian mất nửa bộ test, em đang tính đến dùng thuật Floyd, nhưng mà vẫn chưa định hình được cách làm, nhờ mọi người giúp đỡ. Em cảm ơn!!!