Computer >> Máy Tính >  >> Lập trình >> Lập trình

Vấn đề Tháp Hà Nội


Tháp Hà Nội là một bài toán đố. Nơi chúng ta có ba giá đỡ và n đĩa. Ban đầu, Đĩa được đặt ở giá đỡ đầu tiên. Chúng ta phải đặt đĩa vào giá đỡ thứ ba hoặc giá đỡ đích, giá đỡ thứ hai hoặc giá đỡ phụ có thể được sử dụng làm giá đỡ.

  • Nhưng có một số quy tắc cần tuân theo.
  • Chúng tôi chỉ có thể chuyển một đĩa cho mỗi chuyển động.
  • Chỉ có thể lấy đĩa trên cùng từ giá đỡ.
  • Không có đĩa lớn hơn sẽ được đặt ở trên cùng của đĩa nhỏ hơn.

Vấn đề này có thể được giải quyết dễ dàng bằng đệ quy. Lúc đầu, sử dụng đệ quy, các đĩa trên cùng (n-1) được đặt từ nguồn đến giá đỡ phụ, sau đó đặt đĩa cuối cùng từ nguồn đến đích, sau đó lại đặt (n-1) đĩa từ giá đỡ phụ đến giá đỡ đích bằng đệ quy.

Đầu vào và Đầu ra

Input:
Number of discs: 3
Output:
1. Move disk 1 from A to C
2. Move disk 2 from A to B
3. Move disk 1 from C to B
4. Move disk 3 from A to C
5. Move disk 1 from B to A
6. Move disk 2 from B to C
7. Move disk 1 from A to C

Thuật toán

toh(n, s, a, d)

Đầu vào: Số lượng đĩa, nguồn, phụ, đích.

Đầu ra: Các bước để di chuyển đĩa từ nguồn đến đích duy trì các quy tắc thích hợp.

Begin
   if n = 1, then
      display move disc from s to d
   toh(n-1, s, d, a)

   display move disc from s to d
   toh(n-1, a, s, d)
End

Ví dụ

#include<iostream>
using namespace std;

void TOH(int n, char s, char a, char d) {
   static int count = 0;          //store number of counts
   if(n == 1) {
      count++;
      cout << count<< ". Move disk " << n << " from "<<s <<" to "<<d<<endl;
      return;      //base case, when only one disk
   }

   TOH(n-1, s, d, a);               //recursive call the function
   count++;
   cout << count<< ". Move disk " << n << " from "<<s <<" to"<<d<<endl;
   TOH(n-1, a, s, d);
}

int main() {
   int n;
   cout << "Enter the number of disks: ";
   cin >> n;
   TOH(n, 'A','B','C');
}

Đầu ra

Enter the number of disks: 3
1. Move disk 1 from A to C
2. Move disk 2 from A to B
3. Move disk 1 from C to B
4. Move disk 3 from A to C
5. Move disk 1 from B to A
6. Move disk 2 from B to C
7. Move disk 1 from A to C