#PH014. Tháp Hà Nội (Tower of Hanoi)
Tháp Hà Nội (Tower of Hanoi)
Tháp Hà Nội
Nguồn: CSES Problem Set
Phiên bản: Phước Hưng OJ Extended
Đề bài
Trò chơi Tháp Hà Nội gồm ba cọc: cọc trái, cọc giữa và cọc phải, cùng với đĩa tròn có kích thước đôi một khác nhau.
Ban đầu, tất cả các đĩa đều nằm trên cọc trái và được xếp theo thứ tự kích thước tăng dần từ trên xuống dưới: đĩa nhỏ nhất ở trên cùng và đĩa lớn nhất ở dưới cùng.
Mục tiêu là chuyển toàn bộ đĩa từ cọc trái sang cọc phải, với cọc giữa được sử dụng làm cọc trung gian.
Trong mỗi bước di chuyển:
- chỉ được lấy đĩa nằm trên cùng của một cọc;
- đĩa được lấy ra phải được đặt lên trên cùng của một cọc khác;
- không được đặt một đĩa lớn hơn lên trên một đĩa nhỏ hơn.
Hãy tìm một dãy thao tác hợp lệ sao cho tổng số bước di chuyển là nhỏ nhất.
Ba cọc được đánh số lần lượt như sau:
- cọc trái là cọc ;
- cọc giữa là cọc ;
- cọc phải là cọc .
Input
Dòng duy nhất chứa số nguyên — số lượng đĩa.
Output
Dòng đầu tiên in ra số nguyên — số bước di chuyển nhỏ nhất cần thực hiện.
Tiếp theo, in ra dòng mô tả các bước di chuyển theo đúng thứ tự thực hiện.
Mỗi dòng chứa hai số nguyên và , biểu thị việc chuyển đĩa trên cùng từ cọc sang cọc .
Subtask
- Subtask 1 — 100%: .
Ví dụ
Input
2
Output
3
1 2
1 3
2 3
Giải thích
Có đĩa ban đầu đều nằm trên cọc .
Trước tiên, chuyển đĩa nhỏ từ cọc sang cọc :
1 2
Sau đó, đĩa lớn có thể được chuyển từ cọc sang cọc :
1 3
Cuối cùng, chuyển đĩa nhỏ từ cọc sang cọc :
2 3
Sau bước, cả hai đĩa đều nằm trên cọc và mọi thao tác đều tuân thủ quy tắc không đặt đĩa lớn hơn lên trên đĩa nhỏ hơn.
Không thể hoàn thành việc chuyển hai đĩa với ít hơn bước, vì vậy kết quả trên đạt số bước di chuyển nhỏ nhất.