ในปัญหานี้ เราได้รับสตริง งานของเราคือสร้างโปรแกรม c เพื่อพิมพ์พีชคณิตทั้งหมดของสตริงที่กำหนด
โปรแกรมนี้จะหาชุดค่าผสมที่เป็นไปได้ทั้งหมดของสตริงที่ระบุและพิมพ์ออกมา
การเรียงสับเปลี่ยน คือการจัดเรียงของทุกส่วนของวัตถุในลำดับที่เป็นไปได้ทั้งหมดของการจัดเรียง
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
xyz
ผลลัพธ์
xyz, xzy, yxz, yzx, zxy, zyx
คำอธิบาย
These are all permutations take in order.
ในการแก้ปัญหานี้ เราจะใช้การย้อนรอย กล่าวคือ นำอักขระแต่ละตัวของสตริงเป็นอักขระตัวแรกของการเรียงสับเปลี่ยน จากนั้นจึงเลือกอักขระที่เหลือทั้งหมดของสตริงทีละตัวตามลำดับ และด้วยเหตุนี้การพิมพ์การเรียงสับเปลี่ยนทั้งหมดของสตริง
โปรแกรมพิมพ์เรียงสับเปลี่ยนทั้งหมดของสตริงที่กำหนด
//โปรแกรมพิมพ์เรียงสับเปลี่ยนทั้งหมดของสตริงที่กำหนด −
ตัวอย่าง
#include <iostream>
using namespace std;
void findPermutations(string str, int l, int r){
if (l == r)
cout<<str<<" ";
else{
for (int i = l; i <= r; i++){
swap(str[l], str[i]);
findPermutations(str, l+1, r);
swap(str[l], str[i]);
}
}
}
int main(){
string str = "WXYZ";
int n = str.size();
findPermutations(str, 0, n-1);
return 0;
} ผลลัพธ์
WXYZ WXZY WYXZ WYZX WZYX WZXY XWYZ XWZY XYWZ XYZW XZYW XZWY YXWZ YXZW YWXZ YWZX YZWX YZXW ZXYW ZXWY ZYXW ZYWX ZWYX ZWXY