นี่คือรหัสเทียมมาตรฐานสำหรับการค้นหาแบบกว้างครั้งแรก:
{ seen(x) is false for all x at this point }
push(q, x0)
seen(x0) := true
while (!empty(q))
x := pop(q)
visit(x)
for each y reachable from x by one edge
if not seen(y)
push(q, y)
seen(y) := true
ที่นี่push
และpop
จะถือว่าเป็นการดำเนินการคิว แต่ถ้าพวกมันเป็นการทำงานแบบกองซ้อน? อัลกอริทึมที่ได้จะไปที่จุดยอดตามลำดับความลึกก่อนหรือไม่
หากคุณโหวตให้ความคิดเห็นว่า "นี่มันเล็กน้อย" ฉันขอให้คุณอธิบายว่าทำไมมันถึงสำคัญ ฉันพบปัญหาค่อนข้างยุ่งยาก
5
ฉันเห็นนักเรียนต่อสู้กับสิ่งนี้ดังนั้นฉันจึงไม่คิดว่ามันจะง่ายเกินไป อย่างไรก็ตามคำตอบควรมีอะไรมากกว่า "ใช่" หรือ "ไม่" ความละเอียดที่ต้องการไม่ชัดเจนจากคำถาม
—
Raphael
"ใช่" จะมาพร้อมกับข้อโต้แย้งที่น่าเชื่อ; "ไม่" จะมาพร้อมกับตัวอย่าง แต่มีคำตอบที่ดีกว่าใช่ / ไม่ใช่เมื่อคุณเข้าใจสิ่งที่เกิดขึ้น ...
—
rgrig
@ Joe, Dave: โปรดดูการสนทนา meta ที่ตามมา
—
Gilles 'ดังนั้น - หยุดความชั่วร้าย'
มีความเป็นไปได้ที่จะเขียนโค้ดหลอกเพื่อให้เพียงแค่เปลี่ยน
—
Joe
pop
เป็นสแต็กหรือการดำเนินการคิวเราได้รับ dfs หรือ bfs นอกจากนี้ยังง่ายต่อการเขียนโค้ดหลอกซึ่งในตอนแรกจะปรากฏว่านี่เป็นเรื่องจริง แต่ไม่ใช่ ics.uci.edu//~eppstein/161/960215.html เป็นข้อมูลอ้างอิงที่เกี่ยวข้อง