stanford-oval/wikipedia huggingface dataset:
จูกัดเอี๋ยน
กบฏจูกัดเอี๋ยน > การแปรพักตร์

หลังจากนั้นไม่นาน ฉิวฉุนก็ค่อย ๆ ขาดแคลนเสบียงและถูกตัดขาดจากภายนอกมากขึ้น ผู้ช่วยคนสนิทสองคนของจูกัดเอี๋ยนคือเจียวปั้น (蔣班 เจี่ยว ปาน) และเจียวอี้ (焦彝 เจียว อี๋) บอกกับจูกัดเอี่ยนว่า "จูอี้มาพร้อมทัพใหญ่แต่ไม่อาจทำการใดได้ ซุนหลิมประหารชีวิตจูอี้และกลับไปกังตั๋ง แท้จริงแล้วซุนหลิมกำลังจะสร้างแนวร่วมเมื่อส่งกำลังพลมาช่วยเรา การตัดสินใจของซุนหลิมที่จะถอยกลับไปแสดงให้เห็นว่าเขามีท่าทีจะรอและเฝ้าดู บัดนี้ในเมื่อทหารของเรายังมีขวัญกำลังใจสูงและกระหายที่จะออกรบ เราจึงควรมุ่งกำลังทั้งหมดไปที่การตีฝ่าวงล้อมไปทางด้านใดด้านหนึ่ง อย่างน้อยเราก็สามารถนำกำลังพลวางส่วนหลบหนีและเอาตัวรอดไปได้"
บุนขิมไม่เห็นด้วยและบอกจูกัดเอี๋ยนว่า "ทัพกังตั๋งเป็นที่ขึ้นชื่อในเรื่องการได้รับชัยชนะหลายครั้ง ข้าศึกของเราทางเหนือก็หยุดทัพกังตั๋งไม่ได้ ท่านควรนำทหารหมื่นกว่านายเข้าร่วมกับกังตั๋ง จวนตวน ตัวข้า และคนอื่น ๆ จากกังตั๋งก็ติดอยู่กับท่านที่นี่ ครอบครัวของเรายังคงอยู่ในกังตั๋ง แม้ว่าซุนหลิมไม่ต้องการช่วยพวกเรา ท่านคิดหรือว่าองค์จักรพรรดิและพระญาติวงศ์จะทอดทิ้งเรา ในอดีตมีเหตุที่ข้าศึกของเราประสบกับภัยโรคระบาดหลายครั้ง บัดนี้พวกเราติดอยู่ที่นี่มาเกือบปีแล้ว หากเราปลุกปั่นให้เกิดความรู้สึกแตกแยก ก็จะเกิดการก่อกำเริบภายในขึ้น เราควรยืนหยัดต่อไปและมีความหวังว่าความช่วยเหลือจะมาถึงในไม่ช้า"
บุนขิมโกรธมากเมื่อเจียวปั้นและเจียวอี้โน้มน้าวจูกัดเอี๋ยนหลายครั้งให้ปฏิบัติตามแผนของตน ด้านจูกัดเอี๋ยนก็รู้สึกรำคาญเจียวปั้นและเจียวอี้จึงขั้นต้องการจะประหารชีวิตทั้งคู่ เจียวปั้นและเจียวอี้กลัวพวกตนจะถูกสังหารและตระหนักว่าจูกัดเอี๋ยนมีชะตาต้องล้มเหลว ดังนั้นในเดือนธันวาคม ค.ศ. 257 หรือมกราคม ค.ศ. 258 เจียวปั้นและเจียวอี้จึงหนีออกจากฉิวฉุนและยอมจำนนต่อสุมาเจียว
ต่อมาสุมาเจียวดำเนินอุบายโน้มน้าวจวนเต๊ก (全懌 เฉวียน อี้) และจวนตวน (全端 เฉวียน ตวาน) ให้ยอมจำนน จวนเต๊กและจวนตวนจึงนำทหารหลายร้อยนายออกจากฉิวฉุนและแปรพักตร์เข้าด้วยฝ่ายสุมาเจียว การแปรพักตร์ของทั้งคู่ยิ่งทำให้ภายในทัพของจูกัดเอี๋ยนเกิดความหวาดกลัวและตื่นตระหนกมากยิ่งขึ้น
กบฏจูกัดเอี๋ยน > การพยายามฝ่าวงล้อม

ในเดือนกุมภาพันธ์หรือมีนาคม ค.ศ. 258 บุนขิมบอกกับจูกัดเอี๋ยนว่า "เจียวปั้นและเจียวอี้จากไปเพราะพวกเราไม่ทำตามความคิดพวกเขาที่ให้โจมตีข้าศึก จวนตวนและจวนเต๊กก็แปรพักตร์เช่นกัน ข้าศึกคงต้องลดการป้องกันลง บัดนี้ถึงเวลาที่จะเข้าโจมตีข้าศึกแล้ว" จูกัดเอี๋ยนเห็นด้วย ตัวจูกัดเอี๋ยนพร้อมด้วยบุนขิมและต๋องจูจึงนำกำลังพลออกโจมตีและพยายามตีฝ่าวงล้อม
ความพยายามในการตีฝ่าวงล้อมไม่เป็นผล เพราะทัพวุยก๊กได้สร้างกำแพงและโครงสร้างป้องกันอื่น ๆ ไว้ก่อนหน้านี้แล้ว และอยู่ในตำแหน่งที่ได้เปรียบมากกว่า ทหารวุยก๊กทุ่มก้อนหินและยิงเกาทัณฑ์ใส่ทัพจูกัดเอี๋ยน ทหารฝ่ายจูกัดเอี๋ยนบาดเจ็บหรือเสียชีวิตรงมหลายพันนาย พื้นดินนองไปด้วยเลือด จูกัดเอี๋ยนไม่สามารถตีฝ่าวงล้อมได้จึงล่าถอยกลับเข้าฉิวฉุน ในช่วงเวลานั้นเสบียงในฉิวฉุนก็หมดลง ทหารของจูกัดเอี๋ยนหลายพันนายลอบออกจากฉิวฉุนและยอมจำนนต่อสุมาเจียว
กบฏจูกัดเอี๋ยน > ความล้มเหลวและการเสียชีวิต

ก่อนหน้านี้ บุนขิมต้องการให้จูกัดเอี๋ยนลดการปันส่วนเสบียงอาหารลงและส่งทหารทั้งหมดออกตีฝ่าวงล้อม ส่วนตัวบุนขิมและกำลังทหารจากง่อก๊กจะยังคงอยู่ด้านหลังเพื่อรักษาฉิวฉุน จูกัดเอี๋ยนไม่เห็นด้วยอย่างยิ่งและทะเลาะกับบุนขิมในเรื่องนี้ แม้ว่าในช่วงแรกจูกัดเอี๋ยนและบุนขิมจะร่วมมือกัน แต่ทั้งคู่ก็รู้สีกระแวงและไม่ไว้วางใจกันและกันมากยิ่งขึ้นในขณะที่สถานการณ์ในฉิวฉุนเลวร้ายลง ในที่สุดจูกัดเอี๋ยนก็สั่งประหารชีวินบุนขิม
บุตรชายของบุนขิมคือบุนเอ๋งและบุนเฮา (文虎 เหวิน หู่) ทราบข่าวการเสียชีวิตของบิดาด้วยฝีมือของจูกัดเอี๋ยน ทั้งคู่จึงพยายามหนีออกจากฉิวฉุน หลังจากที่บุนเอ๋งและบุนเฮาโน้มน้าวทหารของพวกตนให้ร่วมติดตามพวกตนไปแต่ไม่สำเร็จ ทั้งคู่จึงหลบหนีไปเพียงลำพังสองคนและยอมจำนนต่อสุมาเจียว เหล่านายทหารแนะนำสุมาเจียวให้ประหารชีวิตทั้งคู่ แต่สุมาเจียวพูดว่า "ความผิดของบุนขิมไม่อาจให้อภัย แม้ว่าบุตรชายของบุนขิมก็ควรถูกประหารชีวิต แต่พวกเขาก็ยอมจำนนต่อเราแล้ว อีกทั้งเมือง (ฉิวฉุน) ก็ยังไม่ถูกยึดคืน การประหารทั้งสองคนนี้ก็มีแต่จะทำให้กบฏยิ่งฮึดสู้มากขึ้น" สุมาสูจึงนิรโทษกรรมให้บุนเอ๋งและบุนเฮา แล้วสั่งทหารม้าหลายร้อยนายให้คุ้มกันทั้งคู่เดินตระเวนรอบฉิวฉุนและประกาศแก่กลุ่มกบฏในฉิวฉุนว่า "เห็นหรือไม่ว่าบุตรชายของบุนขิมได้รับการไว้ชีวิตแล้ว จะมีอะไรต้องกลัวอีกเล่า" จากนั้นสุมาเจียวจึงแต่งตั้งให้บุนเอ๋งและบุนเฮาเป็นนายทหารและให้ทั้งคู่มีบรรดาศักดิ์ระดับกวนไล่เหา (關內侯 กวานเน่ย์โหว)
ในเวลานั้น ทหารส่วนใหญ่ของจูกัดเอี๋ยนหมดกำลังใจที่ต่อสู้หลังติดอยู่ในฉิวฉุนเป็นเวลาหลายเดือนโดยไม่มีอาหาร จูกัดเอี๋ยน, ต๋องจู และนายทหารที่เหลือในฉิวฉุนก็จนปัญญาเช่นกัน สุมาเจียวมาถึงฉิวฉุนและบัญชาการทัพให้เข้ากระชับวงล้อมและร้องเรียกให้ข้าศึกออกรบ ฝ่ายกบฏไม่ตอบสนอง จากนั้นจูกัดเอี๋ยนพยายามจะตีฝ่าวงล้อมพร้อมด้วยผู้ใต้บังคับบัญชาไม่กี่นาย เฮาหุน (胡奮 หู เฟิ่น) นายทหารใต้บังคับบัญชาของสุมาเจียวนำทหารเข้าโจมตีจูกัดเอี๋ยนและสังหารจูกัดเอี๋ยนได้ ศีรษะที่ถูกตัดของจูกัดเอี๋ยนถูกนำไปวางประจาน และสมาชิกในครอบครัวของจูกัดเอี๋ยนก็ถูกประหารชีวิต จูกัดเอี๋ยนนั้นเคยจ้างทหารรับจ้างหลายร้อยคนไว้เป็นองครักษ์ หลังจูกัดเอี๋ยนเสียชีวิต องครักษ์เหล่านี้ก็ถูกจับกุมและได้รับการเสนอโอกาสให้ยอมสวามิภักดิ์แล้วจะได้รับการไว้ชีวิต แต่ไม่มีทหารรับจ้างคนใดยอมรับข้อเสนอ ทั้งหมดจึงถูกประหารชีวิต ความภักดีขององครักษ์เหล่านี้ต่อจูกัดเอี๋ยนเทียบได้กับความจงรักภักดีของผู้ติดตาม 500 คนของเตียนหอง (田橫 เถียน เหิง) อีจ้วน (于詮 ยฺหวี เฉฺวียน) นายทหารของง่อก๊กกล่าวว่า "ข้าได้รับคำสั่งจากนายให้นำกำลังทหารมาช่วยเหลือผู้อื่น ข้าล้มเหลวในการทำภารกิจและไม่สามารถกระทำการใดเพื่อเอาชนะข้าศึกได้ ข้าไม่อาจทนต่อเรื่องนี้ได้" แล้วอีจ้วนจึงถอดเกราะของตนและบุกเข้าหาข้าศึกแล้วถูกสังหาร ต๋องจู, หวาง จั้ว (王祚) และนายทหารง่อก๊กคนอื่นยอมจำนนต่อสุมาเจียว อาวุธยุทโธปกรณ์ที่ยึดมาได้จากทัพง่อก๊กกองใหญ่เหมือนเนินเขา
ครอบครัว

จูกัดเอี๋ยนมีบุตรชายอย่างน้อย 1 คนและบุตรสาวอย่างน้อย 2 คน
บุตรสาวคนหนึ่งของจูกัดเอี๋ยนสมรสกับหวาง กว่าง (王廣) บุตรชายของหวาง หลิง (王淩) ในคืนวันแต่งงาน หวาง กว่างกล่าวกับนางว่า "เจ้ามีสีหน้าที่คล้ายกับกงซิว (公休; ชื่อรองของจูกัดเอี๋ยน) มาก!" นางตอบว่า "ท่านไม่สามารถเป็นเหมือนเยี่ยน-ยฺหวิน (彥雲; ชื่อรองของหวาง หลิง) จึงเปรียบภรรยาของตนเหมือนผู้กล้า!" นางน่าจะถูกประหารชีวิตพร้อมด้วยครอบครัวตระกูลหวาง (ออง) ที่เหลือหลังการล่มจมของหวาง หลิง
บุตรสาวอีกคนหนึ่งของจูกัดเอี๋ยนสมรสกับสุมาเตี้ยมบุตรชายคนที่ 6 ของสุมาอี้ซึ่งขึ้นเป็นอ๋องในยุคราชวงศ์จิ้น นางเป็นที่รู้จักในพระนาม "จูเก่อไท่เฟย์" (諸葛太妃) หรือ "มหาชายาจูกัด" นางให้กำเนิดโอรสของสุมาเตี้ยม 4 พระองค์ ได้แก่ ซือหม่า จิ้น (司馬覲), ซือหม่า เหยา (司馬繇), ซือหมา ฉุ่ย (司馬漼) และซือหม่า ต้าน (司馬澹) พระโอรสของซือหม่า จิ้นคือซือหม่า รุ่ย (司馬睿) ได้ขึ้นเป็นจักรพรรดิผู้ก่อตั้งราชวงศ์จิ้นตะวันออก (ค.ศ. 317-420) และจูกัดเอี๋ยนได้รับการนับว่าเป็นบรรพบุรุษของจักรพรรดิทุกพระองค์ของราชวงศ์จิ้นตะวันออก
บุตรชายของจูกัดเอี๋ยนคือจูกัดเจ้ง ถูกส่งไปเป็นตัวประกันในง่อก๊กในปี ค.ศ. 257 เพื่อขอการสนับสนุนจากง่อก๊กในการก่อกบฏของบิดา จูกัดเจ้งยังคงอยู่ในง่อก๊กและรับราชการเป็นเสนาบดีกลาโหม (大司馬 ต้าซือหม่า) ในปี ค.ศ. 280 หลังราชวงศ์จิ้นพิชิตง่อก๊ก จูกัดเจ้งไปหลบซ่อนตัวในบ้านของพี่สาวคนหนึ่ง (คนที่สมรสกับสุมาเตี้ยม) สุมาเอี๋ยน (จักรพรรดิจิ้นอู่ตี้) จักรพรรดิแห่งราชวงศ์จิ้นทรงถือว่าจูกัดเจ้งเป็นพระญาติของพระองค์ (สุมาเตี้ยมเป็นพระปิตุลาหรืออาของสุมาเอี๋ยน) และทรงทราบว่าจูกัดเจ้งซ่อนตัวอยู่ในบ้านของพี่สาว จึงเสด็จไปเยี่ยม เมื่อจูกัดเจ้งได้ยินว่าจักรพรรดิเสด็จมาเยี่ยม จึงซ่อนตัวอยู่ในห้องส้วมและปฏิเสธที่จะออกมา จักรพรรดิสุมาเอี๋ยนทรงยืนกรานจะพบจูกัดเจ้งและตรัสว่า "วันนี้ ในที่สุดเราก็ได้พบกันอีกครั้ง" จูกัดเจ้งทูลตอบทั้งน้ำตาว่า "กระหม่อมเสียใจที่ไม่อาจเอาสีทาตัวและลอกผิวหนังออกจากหน้าได้ ก่อนที่กระหม่อมจะได้พบกับฝ่าบาทอีกครั้ง!" จักรพรรดิสุมาเอี๋ยนแต่งตั้งให้จูกัดเจ้งเป็นขุนนางมหาดเล็ก (侍中 ชื่อจง) แต่จูกัดเจ้งปฏิเสธการรับตำแหน่ง จากนั้นกลับไปบ้านเกิดและใช้ชีวิตในฐานะสามัญชนในช่วงชีวิตที่เหลือ จูกัดเจ้งมีบุตรชาย 2 คนคือจูเก่อ อี๋ (諸葛頤) และจูเก่อ ฮุย (諸葛恢) จูเก่อ อี๋รับราชการเป็นเสนาบดีพิธีการ (太常 ไท่ฉาง) ในยุคราชวงศ์จิ้นและเป็นที่โปรดปรานของจักรพรรดิจิ้น-ยฺเหวียนตี้ จูเก่อ ฮุยรับราชการเป็นหัวหน้าสำนักราชเลขาธิการ (尚書令 ช่างชูลิ่ง) และมีบทประวัติของตนเองในจิ้นชู (เล่มที่ 77)
ในวัฒนธรรมประชานิยม

จูกัดเอี๋ยนปรากฏครั้งแรกในฐานะตัวละครที่เล่นได้ในภาคที่ 7ของซีรีส์วิดีโอเกมไดนาสตีวอริเออร์ของโคเอ
ดูเพิ่ม

รายชื่อบุคคลในยุคสามก๊ก
บรรณานุกรม

ตันซิ่ว (คริสต์ศตวรรษที่ 3). สามก๊กจี่ (ซานกั๋วจื้อ).
เผย์ ซงจือ (คริสต์ศตวรรษที่ 5). อรรถาธิบายสามก๊กจี่ (ซานกั๋วจื้อจู้).
หลิว อี้ชิ่ง (บรรณาธิการ) (ป. คริสต์ศตวรรษที่ 5). ชื่อชัวซิน-ยฺหวี่ / ชื่อ-ยฺหวี่.
ฝาน เสฺวียนหลิง (648). จิ้นชู.
ซือหม่า กวาง (1084). จือจื้อทงเจี้ยน.
| ด ค กบุคคลสำคัญในวุยก๊ก |
| --- | --- |
จักรพรรดิ:  โจผี  โจยอย  โจฮอง  โจมอ  โจฮวน 
จักรพรรดินี:  เปียนซี  เอียนซี  กุยฮุย  มอซือ  กวยทายเฮา  จักรพรรดินีเจิน  เตียวฮองเฮา  จักรพรรดินีหวาง  จักรพรรดินีเปี้ยน (โจมอ)  จักรพรรดินีเปี้ยน (โจฮวน) 
องค์ชายและราชนิกูลชาย:  โจเจียง  โจสิด  โจฮู  เฉา ก้ง  เฉา ก้าน  เฉา กุ่น  เฉา จฺวิ้น  เฉา จฺวี้  เฉา เจี้ยน  เฉา เปียว  เฉา เม่า (อ๋องแห่งเล่อหลิง)  เฉา ยง  เฉา สฺวิน  เฉา เสีย  เฉา เหยี่ยน  เฉา หรุย  เฉา หลิน (อ๋องแห่งตองไฮ)  เฉา หลิน (อ๋องแห่งไพก๊ก)  เฉา หลี่  เฉา ฮุย 
เจ้าหญิงและราชนิกูลหญิง:  โจเฮา  เฉา เซี่ยน  เฉา หฺวา  หลิว ม่าน  เจ้าหญิงตงเซียง  เจ้าหญิงอานหยาง 
ผู้สำเร็จราชการแผ่นดิน:  โจซอง  สุมาอี้  สุมาสู  สุมาเจียว  สุมาเอี๋ยน 
ขุนนางฝ่ายพลเรือน:  กงซุน หฺว่าง  กว่าน หนิง  กาเซี่ยง  กาอุ้น  โกหยิว  งอก๋ง  งีสง  จงฮิว  จูจ้าน  เจียวเจ้  โจง่าน  โจจุ้น  ชาง ฉือ  ซุนจู  ซุนโจย  เซียวค้า  เซียวหลวน  ตังเจี๋ยว  ตังสิม  ตันกุ๋น  ตู้ จี  เตงปิด  เตงเหยียง  เตียวกี๋  เตียวต๋อง  เตียวบ้อ  เตียวอิบ  บู๊ขิวเตี้ยน  ปิดห้วน  เป้า ซฺวิน  เปาต้าน  ลิเตียน  ลิฮอง  เล่าเซียว  เล่าหัว  เลียงกี๋  หลิว ฉือ  หลีซิน  หวนแก  หันค่าย  หุยสิว  อองก๋วน  อองเก๋ง  อองซก  อองซิม  อองลอง  อองเหงียบ  อุยก๋วน (เว่ย์ กว้าน)  เอียวจ๋ง  ฮวนกาย  ฮวนห้อม  ฮัวหิม  ฮูสวน  เฮ่งเสียง  แฮหัวหุย  แฮหัวฮุย  แฮหัวโฮ  แฮเฮาเหียน  โฮอั๋น 
ขุนนางฝ่ายทหาร:  กองซุนเอี๋ยน  กัว ซิว  กากุ๋ย  กุยห้วย  กุอั๋น  คันห่อง  เคาทู  เคาหงี  เค้าอิ๋น  งักจิ้น  งักหลิม  งุยเป๋ง  จงป้า  จงโฮย  จวนตวน  จวนเต๊ก  จิวท่าย  จีนล่ง  จูกัดสู  จูกัดเอี๋ยน  จูเหลง  เจียวปั้น  เจียวอี้  โจจิ๋น  โจเจียง  โจเป๋า  โจหยิน  โจหอง  โจหุ้น  โจอี้  โจฮิว  ซินต๋ำ  ซินเป  ซินหงี  ซิหลง  ซุนไค  ซุนเล้  เซงจุย  เซงเจ  ต๋องจู  ตันเกี๋ยน  ต้านท่าย  เตงงาย  เตาอี้  เตียวคับ  เตียวเต๊ก  เตียวเลี้ยว  เตียวอี้  เตียวฮอ  ไต้เหลง  บังเต๊ก  เบ้งตัด  บุนขิม  บุนเพ่ง  บุนเอ๋ง  บุนเฮา  บู๊ขิวเขียม  ปีเอียว  ลิหิม  สุมาปอง  สุมาเล่าจี๋  สุเมา  หมันทอง  หวาง หลิง  อองกิ๋น  อองกี๋  อองซอง  อองสง  อ้าวจุ๋น  อิกิ๋ม  อินต้ายบก  อินเล้  อุยก๋วน (หฺวาง เฉฺวียน)  เอียวเก๋า  เอียวฉิว  เอียวหัว  ฮั่นจ๋ง  เฮ็กเจียว  เฮาหุน  แฮหัวซง  แฮหัวตุ้น  แฮหัวป๋า  แฮหัวหลิม 
สตรีที่มีชื่อเสียงคนอื่น ๆ:  กัว หฺวาย  จาง ชางผู  จาง ชุนหฺวา  เจ้าหญิงฉางชาน  ชุยชื่อ  ซัวเอี๋ยม  ซินเหียนเอ๋ง  เซี่ยโหว ฮุย  ผาง เอ๋อ  เว่ย์ ฮฺวาฉุน  สฺวิน ฉ่าย  สฺวี อี้  หวาง ยฺเหวียนจี  หยาง เยี่ยน  หวาง อี้  หยาง ฮุย-ยฺหวี  แฮฮัวเหลง 
บุคคลที่มีชื่อเสียงคนอื่น ๆ:  กวนลอ  กองซุนสิว  แก่หวน  เจ็ดปราชญ์แห่งป่าไผ่  โจวุนซก  ปีเอี๋ยน  ปู้ตู้เกิน  ม้ากิ้น  ลิวฮู  ลุนติด  ห่อปี  อองเกี๋ยน  เอียวจอ  โอยเอี๋ยน  เฮ่งเพา
ขั้นตอนวิธีของพริม

ขั้นตอนวิธีของพริม (อังกฤษ: Prim's algorithm)Prim's Algorithm ถูกพัฒนาโดยนักคณิตศาสตร์ชื่อ Vojtech Jarnik ในปี1930 ต่อมาถูก พัฒนาต่อโดยนักคอมพิวเตอร์ชื่อ Robert C. Prim ในปี1957 และ Edsger Dijkstra ในปี1959 ดังนั้น อัลกอริทึมนี้บางทีจึงมักเรียกว่า DJP Algorithm , Jarnik Algorithm หรือ Prim-Jarnik Algorithm ซึ่งเป็นอัลกอริทึมที่ใช้ในการหาขนาด หรือน้ำหนักของต้นไม้ทอดข้ามที่น้อยที่สุด
เราจะเริ่มจากการทำ minimum spanning tree เล็ก ๆในกราฟก่อน จากนั้นจะค่อยๆเลือก edge ที่ ไม่ต่อกับ minimum spanning tree ย่อย ๆเดิมมาต่อเพิ่มไปเรื่อย ๆ จนได้ครบทุก node ซึ่ง algorithm ตัวนี้ จะ implement คล้ายๆกับ Dijkstra's Algorithm
ตัวอย่างขั้นตอนวิธีการของพริม
codeขั้นตอนวิธีของพริม

import heapq

def prim(nodes,edges):
    if nodes==None and edges==None:
        return None
    conn = {}
    for u, v, w in edges:
        if u not in conn:
            conn[u] = [(w,u,v)]
            # print(conn[u])            
        else:
            conn[u].append((w, u, v))
            # print(conn[u])  
        if v not in conn:
            conn[v] = [(w,v,u)]
            # print(conn[v])  
        else:
            conn[v].append((w, v, u)) 
            # print(conn[v])             
    node = nodes[0]    
    usable_edges = conn[node]    
    heapq.heapify(usable_edges)
    Q = set(node)
    mst = []
    while len(usable_edges) > 0:        
        wt, from_node, to_node = heapq.heappop(usable_edges)        
        if to_node not in Q:
            Q.add(to_node)
            mst.append((from_node, to_node, wt))
            # print(mst)            
            for edge in conn[to_node]:                
                ww, uu, vv = edge
                if vv not in Q:
                    heapq.heappush(usable_edges, (ww, uu, vv)) 
    return mst
codeขั้นตอนวิธีของพริม > testcase ขั้นตอนวิธีของพริม

import heapq
from prim import prim
# scenario1:กราฟทั่วไป
# Given:มีเส้นเชื่อมดังที่กำหนด
# When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode
# Then:ได้ผลลัพธ์คือ[('A', 'D', 5),('D', 'F', 6),('A', 'B', 7),('B', 'E', 7),('E', 'C', 5),('E', 'G', 9)]
def test_case1():
    edges = [ ("A", "B", 7), ("A", "D", 5),
          ("B", "C", 8), ("B", "D", 9), ("B", "E", 7),
      ("C", "E", 5),
      ("D", "E", 15), ("D", "F", 6),
      ("E", "F", 8), ("E", "G", 9),
      ("F", "G", 11)]
 
    nodes = ["A","B","C","E","F","G"]
    mst=[('A', 'D', 5),('D', 'F', 6),('A', 'B', 7),('B', 'E', 7),('E', 'C', 5),('E', 'G', 9)]
    assert prim(nodes,edges )==mst

# scenario2:กราฟทั่วไปแต่มีขนาดที่เล็กลง
# Given:มีเส้นเชื่อมดังที่กำหนด
# When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode
# Then:ได้ผลลัพธ์คือ[ ("A", "C", 3),("A", "B", 4),("B", "D", 2)]
def test_case2():
    edges = [ ("A", "B", 4),("A", "C", 3),("A", "D", 5),("B", "D", 2)]
    nodes = ["A","B","C",]
    mst=[ ("A", "C", 3),("A", "B", 4),("B", "D", 2)]
    assert prim(nodes,edges )==mst

# scenario3:ไม่มีกราฟ
# Given:มีเส้นเชื่อมดังที่กำหนด
# When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode
# Then:ได้ผลลัพธ์คือNone
def test_case3():
    edges =None
    nodes =None
    mst=None
    assert prim(nodes,edges )==mst

# scenario4:มีค่าซ้ำกัน
# Given:มีเส้นเชื่อมดังที่กำหนด
# When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode
# Then:ได้ผลลัพธ์คือ[ ("A", "B", 2),("A", "E",2 ),("A", "C", 3),("B", "D", 4)]
def test_case4():
    edges =[ ("A", "B", 2), ("A", "E", 2),("A", "C", 3),("B", "D", 4), ("D", "C", 5), ("E", "C", 6)]
    nodes =["A","B","C","E"]
    mst=[ ("A", "B", 2),("A", "E",2 ),("A", "C", 3),("B", "D", 4)]
    assert prim(nodes,edges )==mst
Big-o

Big-o Prim’s algorithm
       Big o=o(n^2logn)
  Best case กรณีไม่มีmatrix
          Big o=o(1)
   Worst case กรณีมีmatrix
      Big o=o(n^2logn)
↑  http://www.mwit.ac.th/~jeab/sheet40206/Prim.pdf%5Bลิงก์เสีย%5D
↑  https://www.geeksforgeeks.org/greedy-algorithms-set-5-prims-minimum-spanning-tree-mst-2/
↑  http://www.mwit.ac.th/~jeab/sheet40206/Prim.pdf%5Bลิงก์เสีย%5D
↑  https://en.wikipedia.org/wiki/Prim%27s_algorithm
ขั้นตอนวิธีการตรวจสอบการเกิดวงวนของฟลอยด์

ขั้นตอนวิธีการตรวจสอบการเกิดวงวนของฟลอยด์ (อังกฤษ: Floyd's cycle-finding algorithm) หรือเรียกอีกชื่อหนึ่งว่า ขั้นตอนวิธีเต่าและกระต่าย (อังกฤษ: Tortoise and hare algorithm) เป็นขั้นตอนวิธีที่ง่ายและรวดเร็วที่สุดในการตรวจสอบวงในลำดับรายการของข้อมูล ถูกคิดค้นขึ้น ในปี ค.ศ. 1967 โดย นักวิทยาศาสตร์คอมพิวเตอร์สัญชาติอเมริกัน ชื่อ โรเบิร์ต ฟลอยด์ (Robert W. Floyd) เพื่อใช้เป็นขั้นตอนในการตรวจสอบวงที่เกิดขึ้นภายในลำดับของข้อมูลในโครงสร้างข้อมูลแบบรายการ (list) ขั้นตอนวิธีของฟลอยด์นี้ มีความน่าสนใจตรงที่ เป็นขั้นตอนที่ใช้ตัวชี้ 2 ตัว ในการทำงาน ใช้ขอบเขตเวลาไม่เกิน λ+μ (O (λ+μ)) และ ใช้เนื้อที่บนหน่วยความจำเป็นค่าคงตัว (O (1))
หมายเหตุ : λ คือ ความยาวจากจุดเริ่มต้นของรายการไปถึงจุดแรกของการเกิดวง μ คือ ค่าความยาวของ 1 รอบวง (ขนาดของวง) การตรวจสอบวงวนดังกล่าวได้ถูกนำมาใช้ในการตรวจสอบรายการของข้อมูลเพื่อหาตำแหน่งการเกิดของวงวนไม่สิ้นสุดที่เกิดขึ้นในรายการของข้อมูล หรือ วงวนเครื่องสถานะจำกัด หรือ "ไฟไนต์สเตทแมชชีน" (finite state machine) เพื่อที่จะกำจัดวงวนที่ตรวจพบได้ดังกล่าว
แนวคิดการทำงาน

อธิบายแนวคิดการทำงานโดยการเปรียบเทียบพฤติกรรมของตัวชี้ทั้งสองเป็นเต่าและกระต่ายตามลำดับ (Tortoise and hare) ซึ่งตัวชี้ทั้งสองจะทำการวิ่งไปบนรายการของข้อมูล โดยเริ่มจากจุดเริ่มต้นของข้อมูลพร้อมกัน โดยที่ตัวชี้ที่เคลื่อนที่ช้ากว่า เปรียบเสมือนเป็นเต่า จะเคลื่อนที่ไปครั้งละ 1 ก้าว ส่วนตัวชี้อีกตัวหนึ่งซึ่งเคลื่อนที่เร็วกว่าเสมือนกับกระต่าย จะเคลื่อนไปบนรายการของข้อมูลด้วยความเร็วเป็นสองเท่าของเต่า จะตรวจสอบการเกิดวงได้จากการที่ตัวชี้ทั้งสองเคลื่อนที่ไปในรายการของข้อมูลจะมีการพิจารณาจากค่าภายในข้อมูลของตำแหน่งที่ที่ตัวชี้แต่ละตัวชี้อยู่ ถ้าในรายการนั้น มีวงวนแสดงว่ากระต่ายก็มีโอกาสวิ่งวนมาพบกับเต่า (ตรวจสอบได้จาก เมื่อตัวชี้ทั้งสองเคลื่อนที่มาพบกันที่ตำแหน่งเดียวกัน ค่าภายในข้อมูลเท่ากัน แสดงว่ามีวงวนในรายการ) แต่ถ้าหากภายในรายการไม่มีวงวนแล้วนั้นกระต่ายจะวิ่งไปจนถึงปลายทาง (ปลายสุดของรายการ) โดยไม่พบกับเต่าเลยนั่นเอง
ขั้นตอนวิธี

อธิบายใจความสำคัญของขั้นตอนวิธีได้ดังนี้ ในทุกๆ ค่า i >= μ, X (i) = X (i + kλ), โดยที่ k >= 0 หรืออธิบายง่ายๆ คือที่ i = kλ (โดยที่ k มีค่ามากกว่า 0) เมื่อเราพบตำแหน่งที่ X (i) = X (2i) ( หรือ ในทางกลับกันคือ ถ้าเราพบตำแหน่งที่ X (2i) = X (i) ) เราจะพบว่าค่า i ที่น้อยที่สุดจะเป็นตัวคูณของ λ (โดยที่ i มีค่า มากกว่าเท่ากับ μ) ดังนั้นเราต้องทำการตรวจสอบค่าซ้ำกันที่เกิดในกรณีที่กล่าวข้างต้นเพื่อหาจุด v ที่ ค่าใน X (i) = X (2i) เมื่อเราพบจุด v ดังกล่าวแล้ว นั่นคือเราพบว่ามีวงอยู่ในรายการของข้อมูลนั่นเอง
นอกจากนั้นเรายังสามารถย้อนหาระยะจากต้นรายการมาจนถึงจุดแรกที่เกิดวง (λ) ได้โดย การหาจุดที่ X (ν + μ) = X (μ) ทำได้ดังนี้ คือ ให้ตัวชี้เต่ากลับไปเริ่มต้นใหม่ที่ต้นรายการ และตัวชี้ที่แทนกระต่ายอยู่ที่เดิม (เต่าและกระต่ายอยู่ห่างกันเป็นระยะ v) แล้วให้ทั้งสองวิ่งด้วยความเร็วเท่ากันคือ 1 จนกว่าจะพบจุดที่ค่าใน X (ν + μ) = X (μ) เป็นจุดแรกของการเกิดวงนั่นเอง และ เรายังสามารถหาความยาวสั้นสุดของวงได้โดยหาจากจุดที่ X (μ + λ) = X (μ) นั่นเอง สามารถทำได้ดังนี้ เมื่อเราได้ ระยะจากต้นรายการมาจนถึงจุดแรกที่เกิดวง (λ) มาแล้วเริ่มจากจุดแรกที่เกิดวง ให้เราทำการวิ่งโดยใช้ตัวชี้เต่าหยุดอยู่กับที่ และให้ตัวชี้กระต่ายวิ่งไปทีละ 1 แล้วนับจำนวนครั้งการเคลื่อนที่ของตัวชี้กระต่ายจนกว่าจะวนกลับมาพบกับตัวชี้เต่าอีกครั้งหนึ่ง จะได้จำนวนครั้งของการเคลื่อนที่ที่ได้เท่ากับจำนวนระยะสั้นสุดของ 1 รอบวง
รหัสเทียม

เขียนรหัสเทียมได้ดังนี้
tortoise = head
   hare = head
   Forever:
       if end==hare : return 'No loop' : else : hare = hare.next
       if end==hare : return 'No loop' : else : hare = hare.next
       tortoise = tortoise.next
       if hare==tortoise: return 'Loop found'
รหัสเทียมภาษาไทย
ขั้นตอนวิธี การตรวจสอบการเกิดวงวนของฟลอยด์ :
   เต่าเริ่มที่ตำแหน่งต้นของรายการ
   กระต่ายเริ่มที่ตำแหน่งต้นของรายการ
   วนซ้ำ {
       ถ้า ตำแหน่งกระต่ายเท่ากับตำแหน่งปลายทาง “ไม่พบวงวน” : หรือ : กระต่ายเคลื่อนตำแหน่งถัดไปอีก 1 ช่อง
       ถ้า ตำแหน่งกระต่ายเท่ากับตำแหน่งปลายทาง “ไม่พบวงวน” : หรือ : กระต่ายเคลื่อนตำแหน่งถัดไปอีก 1 ช่อง
       เต่าเคลื่อนตำแหน่งถัดไปอีก 1 ช่อง
       ถ้าตำแหน่งเต่าเท่ากับตำแหน่งกระต่าย “พบวงวน”
   }
ประสิทธิภาพการทำงาน

การทำงาน ใช้ขอบเขตเวลาไม่เกิน λ+μ (O (λ+μ)) และ ใช้ เนื้อที่บนหน่วยความจำเป็นค่าคงตัว (O (1))
หมายเหตุ : λ คือ ความยาวจากจุดเริ่มต้นของรายการไปถึงจุดแรกของการเกิดวง , μ คือ ค่าความยาวของ1รอบวง (ขนาดของวง)
ขั้นตอนวิธีที่เกี่ยวข้อง

ขั้นตอนวิธีโรห์ของพอลลาร์ด
ขั้นตอนวิธีของเบรนท์
ขั้นตอนวิธีการตรวจสอบการเกิดวงวนของฟลอยด์,ในชุดลำดับ 2, 0, 6, 3, 1, 6, 3, 1, ...
ขั้นตอนวิธีของเอ็ดมอนด์-คาป

ในด้านวิทยาศาสตร์คอมพิวเตอร์ และ ทฤษฎีกราฟ ขั้นตอนวิธีของเอ็ดมอนด์-คาป (อังกฤษ: Edmonds-Karp algorithm) เป็นขั้นตอนวิธีการแก้ปัญหาการไหลมากสุด (อังกฤษ: Maximum flow) ใน ระบบเครือข่ายการไหล (อังกฤษ: Flow network) โดยการนำเอาวิธีการของฟอร์ด-ฟูเกอร์สัน (อังกฤษ: Ford-Fulkerson method) มาใช้ โดยทำงานได้ในระยะเวลา  O(VE^{2}) หากเปรียบเทียบกันในเชิงเส้นแล้วจะช้ากว่า (อังกฤษ: Relabel-to-front algorithm) ซึ่งทำงานในเวลา  O(V^{3}) แต่ในความเป็นจริงจะพบว่า ขั้นตอนวิธีของเอ็ดมอนด์-คาป จะทำงานได้ดีกว่าหากเป็น กราฟไม่หนาแน่น (อังกฤษ: sparse graphs) ขั้นตอนวิธีแก้ปัญหานี้ถูกเปิดเผยครั้งแรกในปี ค.ศ. 1970 โดยนายดีนิทซ์ (Yefim Dinitz) นักวิทยาศาสตร์ชาวยิว (อดีตเป็นชาวรัสเซีย) โดยมีชื่อว่าขั้นตอนวิธีของดีนิซ (อังกฤษ: Dinic's algorithm) ซึ่งทำงานได้ในเวลา  O(V^{2}E) 2 ปีต่อมา คือปี ค.ศ. 1972 แจ๊ค เอ็ดมอนด์ (Jack Edmonds) กับริชาร์ด คาป (Richard Karp) ได้เสนอวิธีแก้ปัญหานี้ในรูปแบบที่แตกต่างกันออกไปซึ่งถูกเรียกว่า ขั้นตอนวิธีของเอ็ดมอนด์-คาป
ขั้นตอนวิธี

ขั้นตอนวิธีนี้เหมือนขั้นตอนวิธีของฟอร์ด-ฟูเกอร์สัน ยกเว้นในส่วนของการค้นหาวิถีเพิ่มพูน (อังกฤษ: Augmenting path) การค้นหาวิถีเพิ่มพูนในขั้นตอนวิธีนี้นั้น เราจะหาจากวิถีสั่นสุดที่ยังเหลือที่ว่างให้ไหลไปได้ด้วยการค้นทางกว้าง โดยให้แต่ละวิถีมีน้ำหนักของมันเอง โดยจะใช้เวลาทั้งหมดประมาณ  O(VE^{2}) ซึ่งคำนวณจากการที่สามารถหาวิถีเพิ่มพูนในแต่ละครั้งได้ในเวลา  O(E) ซึ่งในการทำงานแต่ละรอบนั้นจะต้องมีวิถีที่อิ่มตัว (Saturated edge) เกิดขึ้นอีกอย่างน้อย 1 วิถี จากขั้นตอนวิธีดังกล่าวจะส่งผลให้ระยะทางจากต้นกำเนิดถึงวิถีอิ่มตัวล่าสุดจะต้องมากกว่าเดิมเสมอ จากขั้นตอนวิธีดังกล่าวเราพบว่าระยะทางของวิถีเพิ่มพูนสั้นสุดนั้นเติบโตขึ้นเป็นลำดับทางเดียว โดยอ้างอิงจากบทพิสูจน์ดังนี้
รหัสเทียม

สามารถดูรายละเอียดเชิงลึกได้ที่ขั้นตอนวิธีของฟอร์ด-ฟูเกอร์สัน
algorithm EdmondsKarp
ข้อมูลนำเข้า:
        C[1..n, 1..n]  (เมตริกความจุ) 
        E[1..n, 1..?]  (รายการผมเพื่อนบ้าน) 
        s              (ก๊อก) 
        t              (อ่าง) 
    ข้อมูลนำออก:
        f              (ค่าอัตราการไหลสูงสุด) 
        F              (เมตริกซึ่งแสดงค่าอัตราการไหลสูงสุดในแต่ละวิถึ) 
    f := 0  (กำหนดค่าเริ่มต้นให้อัตราการไหล) 
    F := array (1..n, 1..n)  (ค่าความจุที่เหลือ จาก u ไป v หรือ C[u,v] - F[u,v]) 
    forever
        m, P := BreadthFirstSearch (C, E, s, t)
        if m = 0
            break
        f := f + m
         (การค้นแบบBacktrack และ สร้างวิถีการไหล) 
        v := t
        while v ≠ s
            u := P[v]
            F[u,v] := F[u,v] + m
            F[v,u] := F[v,u] - m
            v := u
    return (f, F)
ขั้นตอนวิธี ค้นทางกว้าง (BreadthFirstSearch)
    ข้อมูลนำเข้า:
        C, E, s, t
    'ข้อมูลนำออก:
        M[t]           (ความจุของวิถีที่พบ) 
        P              (ตารางบรรพบุรุษ) 
    P := array (1..n)
    for u in 1..n
        P[u] := -1
    P[s] := -2  (ตรวจสอบว่าก๊อกนี้ไม่ถูกค้นพบซ้ำ) 
    M := array (1..n)  (ค่าความจุระหว่างวิถีที่ถูกค้นพบกับปม) 
    M[s] := ∞
    Q := queue ()
    Q.push (s)
    while Q.size () > 0
        u := Q.pop ()
        for v in E[u]
             (ถ้ายังมีความจุให้ไหลได้ และ v ยังไม่เคยถูกค้นพบมาก่อน) 
            if C[u,v] - F[u,v] > 0 and P[v] = -1
                P[v] := u
                M[v] := min (M[u], C[u,v] - F[u,v])
                if v ≠ t
                    Q.push (v)
                else
                    return M[t], P
    return 0, P
ตัวอย่าง

กำหนดให้เครือข่ายมี 7 ปม โดยมีจุดเริ่มต้นก๊อก A และ จบที่อ่าง G และ ความจุ ดังแสดงตามภาพด้านล่าง
ในทุกคู่  f/c ที่ถูกเขียนบนวิถี  f และ  c คือ อัตราการไหลในปัจจุบัน และ ความจุของวิถีนั้น ตามลำดับ ค่าความจุที่เหลืออยู่จาก  u ไป  v คือ  c_{f}(u,v)=c(u,v)-f(u,v) ส่วนต่างของค่าความจุของวิถีนั้นและอัตราการไหลที่ไหลผ่านวิถีดังกล่าว
| ความจุ | วิถี> ผลลัพธ์ในระบบ |
| --- | --- |
 \min(c_{f}(A,D),c_{f}(D,E),c_{f}(E,G))=   \min(3-0,2-0,1-0)=   \min(3,2,1)=1 :  A,D,E,G
 \min(c_{f}(A,D),c_{f}(D,E),c_{f}(E,G))=   \min(3-0,2-0,1-0)=   \min(3,2,1)=1 :  
 \min(c_{f}(A,D),c_{f}(D,F),c_{f}(F,G))=   \min(3-1,6-0,9-0)=   \min(2,6,9)=2 :  A,D,F,G
 \min(c_{f}(A,D),c_{f}(D,F),c_{f}(F,G))=   \min(3-1,6-0,9-0)=   \min(2,6,9)=2 :  
 \min(c_{f}(A,B),c_{f}(B,C),c_{f}(C,D),c_{f}(D,F),c_{f}(F,G))=   \min(3-0,4-0,1-0,6-2,9-2)=   \min(3,4,1,4,7)=1 :  A,B,C,D,F,G
 \min(c_{f}(A,B),c_{f}(B,C),c_{f}(C,D),c_{f}(D,F),c_{f}(F,G))=   \min(3-0,4-0,1-0,6-2,9-2)=   \min(3,4,1,4,7)=1 :  
 \min(c_{f}(A,B),c_{f}(B,C),c_{f}(C,E),c_{f}(E,D),c_{f}(D,F),c_{f}(F,G))=   \min(3-1,4-1,2-0,0--1,6-3,9-3)=   \min(2,3,2,1,3,6)=1 :  A,B,C,E,D,F,G
 \min(c_{f}(A,B),c_{f}(B,C),c_{f}(C,E),c_{f}(E,D),c_{f}(D,F),c_{f}(F,G))=   \min(3-1,4-1,2-0,0--1,6-3,9-3)=   \min(2,3,2,1,3,6)=1 :
ขั้วหลอดเกลียว

หลอดไฟไส้ชนิด 230 โวลต์ ที่มีขั้วเกลียว ขนาด 27 มม. (E27)
ขั้วหลอดเกลียว (อังกฤษ: edison screw) เป็นรูปแบบขั้วต่อหลอดไฟฟ้าที่คิดค้นโดยโทมัส เอดิสัน และนำมาใช้เป็นครั้งแรกในหลอดไฟยี่ห้อ Mazda ซึ่งเริ่มวางขายเมื่อปี พ.ศ. 2452, โดยหลอดจะมีส่วนฐานเป็นเกลียวโลหะ ที่สามารถขันลงไปบนขั้วหลอดที่ขนาดเท่ากัน ซึ่งโดยปกติ จะขันทิศตามเข็มนาฬิกา
ขั้วหลอดเกลียว เป็นขั้วหลอดไฟที่สามารถพบได้ทั่วไป ต่างจากขั้วเขี้ยวที่ใช้กับหลอดไฟฟ้าเฉพาะในบริเตนใหญ่ หรือประเทศที่มีความเกี่ยวข้องทางประวัติศาสตร์กับอังกฤษเท่านั้น
ปัจจุบันขั้วหลอดเกลียวจะมีขนาดระบุไว้ตามมาตรฐาน IEC 60061-1 และใช้กับทั้งหลอดไฟธรรมดา และหลอดไฟชนิดพิเศษ