นักปรัชญาได้ไตร่ตรองปัญหารถเข็นมานานแล้ว น่าเสียดายที่ยังไม่มีมนุษย์คนใดแก้ปัญหานี้ได้ โชคดีที่ในฐานะโปรแกรมเมอร์เราสามารถใช้คอมพิวเตอร์เพื่อแก้ปัญหาให้เราได้!
อินพุต
โปรแกรมของคุณจะทำหน้าที่ป้อนกราฟกำกับ (จำกัด ) (โดยมีขอบอย่างใดอย่างหนึ่งมากที่สุดจากx
ถึงถึงy
สำหรับใด ๆx
และy
) พร้อมโหนดที่กำหนดและจำนวนเต็มที่ไม่ใช่ค่าลบที่แนบมากับแต่ละขอบ (แสดงถึงจำนวนคนที่ผูกติดกับแทร็กนั้น) . นอกจากนี้ทุกโหนดมี edge exit อย่างน้อยหนึ่งตัว
รถเข็นเริ่มต้นที่โหนดที่กำหนด กลับกันถ้ารถเข็นที่โหนดx
, (x,y)
ประโยชน์เลือกขอบ y
คนที่อยู่บนขอบที่ตายและรถเข็นอยู่ในขณะนี้ที่ขอบ กระบวนการนี้จะดำเนินต่อไปตลอดกาล
โปรดทราบว่าผู้คนสามารถตายได้เพียงครั้งเดียวดังนั้นหากขอบ(x,y)
มีn
คนผูกไว้กับมันและรถเข็นวิ่งข้ามพวกเขาพูดว่า 100 ครั้งมันจะยังคงส่งผลให้เกิดการn
เสียชีวิต
เอาท์พุต
ผู้ใช้ประโยชน์ได้เลือกในลักษณะที่จะลดจำนวนคนที่ตาย (ซึ่งรับประกันว่าจะมี จำกัด เนื่องจากมีเพียงคน จำกัด ) โปรแกรมของคุณจะแสดงผลหมายเลขนี้
รูปแบบอินพุต
คุณอาจใช้กราฟอินพุตในแบบที่คุณต้องการ ตัวอย่างเช่นคุณสามารถใช้มันเป็นเมทริกซ์และนับโหนดที่กำหนดเป็นหนึ่งที่มีข้อความ 0. x1,y1,n1;x2,y2,n2;...
หรือคุณอาจจะใช้สิ่งที่ต้องการ ตัวอย่างเช่น0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
เพื่อเป็นตัวแทนของปัญหารถเข็นมาตรฐาน (มีลูปที่ส่วนท้าย)
Testcases
0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
-> 1 (ไปจาก 0 ถึง a, a ถึง c (ฆ่าหนึ่งคน) จากนั้นวนลูปจากรถเข็นไปยัง c)0,0,1;0,a,5;a,a,0
-> 1 (เดินจาก 0 เป็น 0 วิ่งต่อ 1 คนตลอดชั่วนิรันดร์)0,a,5;0,b,1;a,a,1;b,b,6
-> 6 (0 -> a -> a -> a -> a -> ... (โปรดทราบว่าคำตอบที่โลภของการไปที่ b จะไม่ถูกต้อง))0,a,1;0,b,5;a,b,1;b,a,1
-> 3 (0 -> a -> b -> a -> b -> ... )0,a,1;0,b,1;a,a,0;b,b,0
-> 1 (โปรดทราบว่ามีสองตัวเลือกที่แตกต่างกันซึ่งผู้ใช้อาจใช้ว่าทั้งสองฆ่าเพียงคนเดียว)
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดชนะ! โชคดี.
หมายเหตุ: จะไม่มีลูปลูปป่วยและการดริฟท์มัลติแทร็คถูกแบน นอกจากนี้แม้ว่าฉันชอบที่จะคิดถึงปัญหานี้ในแง่ของกฎสามข้อของอาซิมอฟ (/ s) ปีเตอร์เทย์เลอร์ได้ตั้งข้อสังเกตไว้ในกล่องทรายว่าปัญหานี้มีปัญหาทางคณิตศาสตร์เทียบเท่ากับการค้นหาโรห์ .