บทความนี้สาธิตขั้นตอนการนำ DFS ไปใช้กับแผนผังหรือกราฟที่ให้มา
จะใช้ Depth First Search หรือ DFS สำหรับกราฟใน Java ได้อย่างไร
DFS ใช้เป็นหลักในการค้นหากราฟโดยไปที่แต่ละสาขา/จุดยอดเพียงครั้งเดียว สามารถตรวจจับหรือระบุรอบในกราฟที่ช่วยในการป้องกันการหยุดชะงัก สามารถใช้ไขปริศนาหรือปัญหาเขาวงกตได้ DFS สามารถนำไปใช้/ใช้ในอัลกอริทึมกราฟ การรวบรวมข้อมูลเว็บ และการออกแบบคอมไพเลอร์
สำหรับคำอธิบาย โปรดไปที่โค้ดด้านล่างของการค้นหาแบบลึกก่อนหรือ DFS:
ระดับ กราฟ {
ส่วนตัว รายการที่เชื่อมโยง เพิ่มโหนด [ ] ;
ส่วนตัว บูลีน ข้าม [ ] ;
กราฟ ( นานาชาติ จุดยอด ) {
เพิ่มโหนด = ใหม่ รายการที่เชื่อมโยง [ จุดยอด ] ;
ข้าม = ใหม่ บูลีน [ จุดยอด ] ;
สำหรับ ( นานาชาติ ฉัน = 0 ; ฉัน < จุดยอด ; ฉัน ++ )
เพิ่มโหนด [ ฉัน ] = ใหม่ รายการที่เชื่อมโยง ( ) ;
}
เป็นโมฆะ เพิ่มขอบ ( นานาชาติ src, นานาชาติ เริ่ม ) {
เพิ่มโหนด [ src ] . เพิ่ม ( เริ่ม ) ;
}
คำอธิบายของรหัสด้านบน:
- อย่างแรก คลาสชื่อ “ กราฟ ” ถูกสร้างขึ้น ข้างในมีข้อความว่า “ รายการที่เชื่อมโยง ” ชื่อว่า “ เพิ่มโหนด[] ” และอาร์เรย์ประเภทบูลีนชื่อ “ ข้าม[] '.
- ถัดไป ส่งจุดยอดสำหรับตัวสร้างของ “ กราฟ ” คลาสเป็นพารามิเตอร์
- หลังจากนั้น “ สำหรับ ” วนซ้ำถูกสร้างขึ้นเพื่อเลื่อนผ่านแต่ละโหนดของสาขาที่เลือก
- ในที่สุดโมฆะประเภท “ เพิ่มขอบ () ” ใช้เพื่อเพิ่มขอบระหว่างจุดยอด ฟังก์ชันนี้ใช้พารามิเตอร์สองตัว: แหล่งที่มาของจุดยอด “ src ” และจุดยอดปลายทาง “ เริ่ม '.
หลังจากสร้างกราฟแล้ว ตอนนี้ให้เราเพิ่มโค้ดของการค้นหาเชิงลึกก่อนหรือ DFS สำหรับกราฟที่สร้างขึ้นด้านบน:
เป็นโมฆะ ดีเอฟเอส ( นานาชาติ จุดสุดยอด ) {
ข้าม [ จุดสุดยอด ] = จริง ;
ระบบ . ออก . พิมพ์ ( จุดสุดยอด + ' ' ) ;
ตัวทำซ้ำ นี้ = เพิ่มโหนด [ จุดสุดยอด ] . listIterator ( ) ;
ในขณะที่ ( นี้. มีถัดไป ( ) ) {
นานาชาติ [adj.] = นี้. ต่อไป ( ) ;
ถ้า ( ! ข้าม [ [adj.] ] )
ดีเอฟเอส ( [adj.] ) ;
}
}
ในบล็อกรหัสด้านบน:
- ประการแรก “ ดีเอฟเอส() ” ฟังก์ชันถูกสร้างขึ้นซึ่งได้รับ “ จุดสุดยอด ” เป็นพารามิเตอร์ จุดสุดยอดนั้นถูกทำเครื่องหมายว่าเข้าชมแล้ว
- ถัดไป พิมพ์จุดสุดยอดที่เข้าชมโดยใช้ปุ่ม “ พิมพ์ออก () ' วิธี.
- จากนั้น สร้างอินสแตนซ์ของ “ ตัวทำซ้ำ ” ที่วนซ้ำจุดยอดที่อยู่ติดกันของจุดยอดปัจจุบัน
- หากไม่ได้ไปที่จุดยอด ก็จะส่งจุดยอดนั้นไปที่ “ ดีเอฟเอส() ' การทำงาน.
ตอนนี้ให้เราสร้าง ' หลัก() ” ส่วนฟังก์ชันเพื่อสร้างกราฟแล้วใช้ DFS กับสิ่งนั้น:
สาธารณะ คงที่ เป็นโมฆะ หลัก ( สตริง หาเรื่อง [ ] ) {
กราฟ k = ใหม่ กราฟ ( 4 ) ;
เค เพิ่มขอบ ( 0 , 1 ) ;
เค เพิ่มขอบ ( 1 , 2 ) ;
เค เพิ่มขอบ ( 2 , 3 ) ;
เค เพิ่มขอบ ( 3 , 3 ) ;
ระบบ . ออก . พิมพ์ ( 'ต่อไปนี้คือการสำรวจความลึกครั้งแรก' ) ;
เค ดีเอฟเอส ( 1 ) ;
}
}
คำอธิบายของรหัสด้านบน:
- ขั้นแรก สร้างวัตถุ “ เค ” สำหรับ “ กราฟ() ' วิธี.
- ต่อไป “ เพิ่มขอบ () วิธีการ ” ใช้เพื่อเพิ่มขอบระหว่างจุดยอดหลายจุด สิ่งนี้สร้างโครงสร้างของกราฟของเรา
- ในตอนท้าย ส่งค่าจุดยอดใดๆ เป็นอาร์กิวเมนต์ไปยัง ' ดีเอฟเอส() ' การทำงาน. หากต้องการค้นหาเส้นทางจุดยอดจากราก ให้ใช้อัลกอริธึมการค้นหาเชิงลึกก่อน ตัวอย่างเช่น ค่าของ “ 1 ” จะถูกส่งต่อไปยัง “ ดีเอฟเอส() ' การทำงาน.
หลังจากสิ้นสุดขั้นตอนการรวบรวม:
ผลลัพธ์แสดงการค้นหาเชิงลึกก่อนดำเนินการสำเร็จแล้ว
บทสรุป
การค้นหาเชิงลึกก่อนเป็นอัลกอริทึมการผ่านกราฟที่สร้างพื้นฐานสำหรับอัลกอริทึมกราฟต่างๆ เช่น การค้นหาเส้นทางที่สั้นที่สุด ต้นไม้ที่ทอดยาว และการวิเคราะห์การเชื่อมต่อ เริ่มต้นจากรูทโหนดแล้วเคลื่อนที่ให้ลึกที่สุดเท่าที่จะเป็นไปได้จนถึงโหนดการลาหรือโหนดสุดท้ายของสาขานั้นก่อนที่จะย้อนรอย บทความนี้ได้สาธิตขั้นตอนในการใช้การค้นหาเชิงลึกก่อนหรือ DFS สำหรับกราฟใน Java