Hướng dẫn tower of hanoi python - tháp trăn hà nội
Xem thảo luận Cải thiện bài viết Lưu bài viết Xem thảo luận Cải thiện bài viết Lưu bài viết Đọc Python3Bàn luận Tower of Hà Nội là một câu đố toán học nơi chúng tôi có ba thanh và đĩa N. Mục tiêu của câu đố là di chuyển toàn bộ ngăn xếp sang một thanh khác, tuân theo các quy tắc đơn giản sau: & nbsp; 1) Chỉ có thể di chuyển một đĩa. các ngăn xếp và đặt nó lên trên một ngăn xếp khác, tức là một đĩa chỉ có thể được di chuyển nếu đó là đĩa trên cùng trên ngăn xếp. & nbsp; 3) không có đĩa nào được đặt trên đầu của một đĩa nhỏ hơn. 1 đĩa từ thanh nguồn đến thanh phụ trợ một lần nữa có thể được coi là một vấn đề mới và có thể được giải quyết theo cách tương tự. & Nbsp;
def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')2 Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 3 từ cọc A sang cọc B Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 2 từ cọc C sang cọc B Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 4 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 2 từ cọc B sang cọc A Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 3 từ cọc B sang cọc C Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C0
def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')011 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')2 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')3 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')4 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')5 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')6 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')7 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')8
Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 3 từ cọc A sang cọc B Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 2 từ cọc C sang cọc B Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 4 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 2 từ cọc B sang cọc A Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 3 từ cọc B sang cọc C Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C2 Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 3 từ cọc A sang cọc B Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 2 từ cọc C sang cọc B Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 4 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 2 từ cọc B sang cọc A Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 3 từ cọc B sang cọc C Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C3 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')0 def 9
Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 3 từ cọc A sang cọc B Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 2 từ cọc C sang cọc B Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 4 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 2 từ cọc B sang cọc A Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 3 từ cọc B sang cọc C Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C2223 def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B')0
Move disk 1 from source A to destination C Move disk 2 from source A to destination B Move disk 1 from source C to destination B Move disk 3 from source A to destination C Move disk 1 from source B to destination A Move disk 2 from source B to destination C Move disk 1 from source A to destination C Move disk 4 from source A to destination B Move disk 1 from source C to destination B Move disk 2 from source C to destination A Move disk 1 from source B to destination A Move disk 3 from source C to destination B Move disk 1 from source A to destination C Move disk 2 from source A to destination B Move disk 1 from source C to destination B
Đầu raO(n) Độ phức tạp về thời gian: O (2N) Bài toán Tháp Hà Nội là một bài toán rất nổi tiếng và kinh điển, rất thích hợp để minh họa cho thuật toán đệ quy. Bài toán Tháp Hà Nội là gì?
Yêu cầu : Chuyển
Cách giải Bài toán Tháp Hà NộiChúng ta sẽ xét các trường hợp của
Ví dụ, với Mã nguồn chương trình bằng Python: def TowerOfHanoi(n , source, destination, auxiliary): if n==1: print("Chuyển đĩa 1 từ cọc",source,"sang cọc",destination) return TowerOfHanoi(n-1, source, auxiliary, destination) print("Chuyển đĩa",n,"từ cọc",source,"sang cọc",destination) TowerOfHanoi(n-1, auxiliary, destination, source) # Ví dụ với n = 4 n = 4 TowerOfHanoi(n,'A','C','B') Kết quả chạy chương trình: Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 3 từ cọc A sang cọc B Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 2 từ cọc C sang cọc B Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 4 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C Chuyển đĩa 2 từ cọc B sang cọc A Chuyển đĩa 1 từ cọc C sang cọc A Chuyển đĩa 3 từ cọc B sang cọc C Chuyển đĩa 1 từ cọc A sang cọc B Chuyển đĩa 2 từ cọc A sang cọc C Chuyển đĩa 1 từ cọc B sang cọc C |