จะใช้ Depth First Search หรือ DFS สำหรับกราฟใน Java ได้อย่างไร

Ca Chi Depth First Search Hrux Dfs Sahrab Kraf Ni Java Di Xyangri



Depth First Search (DFS) เป็นอัลกอริธึมการค้นหาการผ่านกราฟที่เริ่มสำรวจแต่ละสาขาจากรูทโหนด จากนั้นย้ายให้ลึกที่สุดเท่าที่จะเป็นไปได้เพื่อสำรวจตามแต่ละสาขาของกราฟก่อนที่จะย้อนรอย การค้นหานี้ดำเนินการได้ง่ายและใช้หน่วยความจำน้อยกว่าเมื่อเทียบกับอัลกอริทึมการข้ามผ่านอื่นๆ ตรวจเยี่ยมโหนดทั้งหมดในส่วนประกอบที่เชื่อมต่อและช่วยในการตรวจสอบเส้นทางระหว่างสองโหนด DFS ยังสามารถทำการเรียงลำดับทอพอโลยีสำหรับกราฟ เช่น Directed Acyclic Graph (DAG)

บทความนี้สาธิตขั้นตอนการนำ 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