Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

QUEUE25 - Hàng đợi - Queue

Hàng đợi (tiếng Anh: queue) là một cấu trúc dữ liệu dùng để chứa các đối tượng làm việc theo cơ chế FIFO (viết tắc từ tiếng Anh: First In First Out), nghĩa là việc thêm vào hoặc lấy một đối tượng ra khỏi hàng đợi, được thực hiện theo cơ chế "vào trước ra trước".

Cấu trúc dữ liệu hàng đợi có thể định nghĩa như sau: Hàng đợi là một cấu trúc dữ liệu trừu tượng (ADT) tuyến tính. Tương tự như ngăn xếp, hàng đợi hỗ trợ các thao tác:

EnQueue(o): thêm đối tượng o vào cuối hàng đợi.

DeQueue(): lấy đối tượng ở đầu queue ra khỏi hàng đợi và trả về giá trị của nó. Nếu hàng đợi rỗng thì lỗi sẽ xảy ra.

IsEmpty(): kiểm tra xem hàng đợi có rỗng không.

Front(): trả về giá trị của phần tử nằm ở đầu hàng đợi mà không hủy nó. Nếu hàng đợi rỗng thì lỗi sẽ xảy ra.

Các thao tác thêm, trích và huỷ một phần tử phải được thực hiện ở hai phía khác nhau của hàng đợi, do đó hoạt động của hàng đợi được thực hiện theo nguyên tắc FIFO. Cũng như ngăn xếp, cấu trúc mảng một chiều hoặc cấu trúc danh sách liên kết có thể dùng để biểu diễn cấu trúc hàng đợi.

Ứng dụng:

Cho đơn đồ thị vô hướng G = (E, V), có n đỉnh m cạnh. Một đường đi từ đỉnh s đến đỉnh t là 1 dãy các đỉnh không trùng nhau s = x1 -> x2 -> ... -> xk = t. Độ dài đường đi là số cạnh trên đường đi

Yêu cầu: Tìm đường đi ngắn nhất từ đỉnh s đến đỉnh t.

Hint:

Sử dụng thuật toán tìm kiếm theo chiều rộng - BFS sử dụng cấu trúc Queue. Thuật toán sẽ có cấp độ O(M+N) hoặc O(N2) tuỳ cách cài đặt. Ngoài ra cũng có thể sử dụng 1 trong số các thuật toán tìm đường đi ngắn nhất khác.

Input

Dòng 1: Gồm 4 số n, m, s, t (1 <= n <= 100)

M dòng tiếp theo: Mỗi dòng gồm 2 số i, j mô tả 1 cạnh của đồ thị.

Output

Dòng 1: ghi độ dài đường đi ngắn nhất.

Dòng 2: Ghi các đỉnh theo thứ tự trên đường đi từ s đến t.

Example

Input:
5 5 1 5
1 3
3 5
1 4
4 2
2 5

Output:
2
1 3 5


Được gửi lên bởi:special_one
Ngày:2009-01-11
Thời gian chạy:1s
Giới hạn mã nguồn:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Ngôn ngữ cho phép:C CSHARP CPP JAVA PAS-FPC

hide comments
2015-05-20 11:33:42
ai làm bài này chưa cho e tham khảo với ạ
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.