Combination Wednesday, September 08, 2010 8:49 AM การเลือกของปกติ กับการเลือกของแล้วคืนกลับไป(เลือกซ้ำได้) เช่นโจทย์การแก้ Combination ของรหัสแม่กุญแจ โดยสร้างเลขทั้งหมดที่เป็นไปได้ วิธีปกติคือ for(i=0;i<10000;i++) แต่ General Solution คือการวิ่งตรวจสอบทุกแบบที่เป็นไปได้ เช่นมีตัวเลข ABCD สามารถแยกได้เป็น AAAA AAAB … AAAD AABA …. AADD … ABAA … DDDD โดย Framework ทั่วไปคือการกำหนด Initial Step แล้วใส่เข้าไปใน Data Structure จากนั้นวนลูปนำของออกมาจาก Data Structure ถ้าตรวจสอบแล้วว่าขั้นนั้นไม่ใช่คำตอบ แล้วใส่ขั้นต่อไปทั้งหมดที่เป็นไปได้เข้าไปใน Data Structure Backtracking Wednesday, September 08, 2010 9:01 AM เป็นกระบวนการสร้าง state ทีละขั้นๆ ไปเรื่อยๆ โดย Data Structure ที่ใช้นั้นปกติจะมี Stack กับ Queue ซึ่งการใช้ Stack มักจะเขียนแทนด้วย Recursive ในตัวอย่างเรื่อง Padlock นั้นใช้การ recursive แก้ปัญหาดังนี้ void backtracking(int step,int *sol){ If(step