บทนำ
ปริศนาคำศัพท์ยอดนิยมคือการแปลงหนึ่งคำเป็นอีกคำหนึ่งผ่านชุดของขั้นตอนที่แทนที่ตัวอักษรเพียงตัวเดียวและส่งผลให้เกิดคำที่ถูกต้องเสมอ ตัวอย่างเช่น BAG สามารถแปลงเป็น DOG ผ่านเส้นทางห้าขั้นตอน:
BAG -> BAT -> CAT -> COT -> COG -> DOG
เส้นทางที่สั้นกว่านั้นมีอยู่ในกรณีนี้เช่นกัน ตัวอย่างเช่น:
BAG -> BOG -> DOG
หากมีใครวาดกราฟซึ่งจุดยอดถูกติดป้ายกำกับด้วยคำโดยมีขอบระหว่างคำคู่ใด ๆ ที่แตกต่างกันด้วยตัวอักษรหนึ่งตัวเส้นทางที่สั้นที่สุดจาก "BAG" ถึง "DOG" จะประกอบด้วยสองขอบ
ท้าทาย
คุณจะต้องเขียนโปรแกรมที่รับเป็น "พจนานุกรม" ของคำที่ทุกคนมีความยาวเท่ากันแสดงถึงคำที่อนุญาตทั้งหมดที่สามารถปรากฏเป็นขั้นตอนตามเส้นทาง มันควรจะส่งออกอย่างน้อยหนึ่ง "เส้นทางที่สั้นที่สุดที่ยาวที่สุด" นั่นคือเส้นทางระหว่างคำสองคำคือ:
ไม่เกินเส้นทางอื่นระหว่างคำทั้งสองนี้
อย่างน้อยตราบใดที่เส้นทางที่สั้นที่สุดที่เป็นไปได้ระหว่างคำอื่น ๆ ในรายการ
ในบริบทของกราฟที่อธิบายข้างต้นความยาวของเส้นทางดังกล่าวคือเส้นผ่านศูนย์กลางของกราฟ
ในกรณีที่เสื่อมโทรมซึ่งไม่มีคำใดที่ป้อนเข้าสามารถแปลงเป็นคำอื่น ๆ ได้ให้ส่งออกอย่างน้อยหนึ่งเส้นทางที่มีความยาวศูนย์นั่นคือคำเดียว
ตัวอย่าง
อินพุต ["bag", "bat", "cat", "cot", "dot", "dog"] ควรให้เส้นทางผ่านทั้งหกคำในลำดับนั้น (หรือเรียงกลับกัน) เนื่องจากเส้นทางที่สั้นที่สุดจาก " กระเป๋า "เป็น" สุนัข "ในพจนานุกรมนี้เป็นไปได้ยาวที่สุดห้าขั้นตอน
อินพุต ["bag", "bat", "bot", "cat", "cot", "dot", "dog"] ควรให้เส้นทาง "bag, bat, bot, dot, dog" และ / หรือ ความผกผัน
อินพุต ["code", "golf", "male", "buzz", "mole", "role", "mold", "cold", "gold", "mode"] ควรให้เส้นทางระหว่าง "code" และ "กอล์ฟ"
อินพุต ["หนึ่ง", "สอง", "หก", "สิบ"] สอดคล้องกับกราฟที่ไม่มีขอบดังนั้นเอาท์พุทเส้นทางเดียวคำ (ศูนย์ยาว) หนึ่งหรือมากกว่า
หากอินพุตมีความยาวไม่เท่ากันสองคำเอาต์พุตจะไม่ถูกกำหนด
กฎระเบียบ
- บังคับใช้กฎกอล์ฟมาตรฐาน
- จะมีเส้นทาง "สั้นที่สุด" หลายเส้นทาง คุณต้องส่งออกอย่างน้อยหนึ่งรายการ แต่มีอิสระที่จะส่งออกได้มากเท่าที่คุณต้องการ
- คุณมีอิสระในการตัดสินใจว่าพจนานุกรมอินพุตถูกส่งผ่านไปยังโปรแกรมของคุณอย่างไร
- รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
[]หรือ[[]])?