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

Tất cả các hoán vị của một chuỗi sử dụng phép lặp?

Trong phần này, chúng ta sẽ xem cách lấy tất cả các hoán vị của một chuỗi. Cách tiếp cận đệ quy rất đơn giản. Nó sử dụng quy trình theo dõi trở lại. Nhưng ở đây chúng tôi sẽ sử dụng phương pháp lặp lại.

Tất cả các hoán vị của một chuỗi ABC giống như {ABC, ACB, BAC, BCA, CAB, CBA}. Hãy để chúng tôi xem thuật toán để có ý tưởng tốt hơn.

Thuật toán

getAllPerm (str)

 begin sắp xếp các ký tự của chuỗi trong khi true, in chuỗi str i:=length of str - 1 while str [i - 1]> =str [i], do i:=i - 1 nếu tôi là 0, sau đó trả về end nếu xong j:=length of str - 1 while j> i AND str [j] <=str [i - 1], do j:=j - 1 xong trao đổi ký tự từ vị trí str [i - 1], str [j] đảo ngược chuỗi. kết thúc 

Ví dụ

 #include  #include  using namespace std; void getAllPerm (string str) {sort (str.begin (), str.end ()); while (true) {cout < =str [i]) {if (--i ==0) return; } int j =str.length () - 1; while (j> i &&str [j] <=str [i - 1]) j--; swap (str [i - 1], str [j]); đảo ngược (str.begin () + i, str.end ()); }} int main () {string str ="WXYZ"; getAllPerm (str);} 

Đầu ra

>