แนวคิดของไดอะแกรม
กราฟคือการขยายตัวของต้นไม้ในอัลกอริทึม ต้นไม้เป็นโครงสร้างข้อมูลจากบนลงล่าง โหนดมีโหนดพาเรนต์ (ยกเว้นโหนดรูท) จัดจากบนลงล่าง กราฟไม่มีแนวคิดของโหนดพ่อ-ลูกและโหนดในกราฟล้วนเป็นความสัมพันธ์ที่เท่าเทียมกันซึ่งทำให้ผลลัพธ์มีความซับซ้อนมากขึ้น
กราฟกำกับกราฟกำกับ
รูปที่ g = (v, e) โดยที่ v หมายถึงจุดสุดยอด, e หมายถึงขอบขอบและขอบเป็นคู่จุดคงที่ (u, v), โดยที่ (u, v) ∈V
ในสองวันที่ผ่านมาฉันพบอัลกอริทึมเกี่ยวกับกราฟ ฉันค้นหาออนไลน์เป็นเวลานานและไม่พบกราฟเวอร์ชัน Java ในโครงสร้างข้อมูลและการดำเนินการที่เกี่ยวข้อง ดังนั้นฉันจึงพบหนังสือโครงสร้างข้อมูล Java และอ่านมัน ต่อไปนี้เป็นบทสรุปของการจัดเก็บกราฟที่ไม่ได้บอกทิศทางและการสำรวจความสำคัญเชิงลึกของกราฟที่รวบรวมตามคำอธิบายในหนังสือ อย่างไรก็ตามการสำรวจนี้สามารถสำรวจกราฟที่เชื่อมต่อได้เท่านั้นและเพื่อสำรวจกราฟที่ไม่เชื่อมต่อเท่านั้น แต่ก็ยังต้องได้รับการแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับผู้ที่ต้องการ
แพ็คเกจ com.homework;/*** กำหนดคลาสสแต็ก*/คลาส stackx {ส่วนตัวสุดท้าย int ขนาด = 20; int ส่วนตัว [] st; int ส่วนตัว; // เริ่มต้นสแต็กสาธารณะ stackx () {st = new int [ขนาด]; top = -1;} // เริ่มต้น st [top-];} // ส่งคืนองค์ประกอบด้านบนของสแต็กสาธารณะ int peak () {return st [top];} // ตรวจสอบว่าสแต็กเป็นบูลีนสาธารณะที่ว่างเปล่า isempty () {return (top ==-1);}}/** * Lab) {label = lab; wasVisited = false;}}/** * กำหนดคลาสกราฟ * @Author Administrator * */Class กราฟ {ส่วนตัวสุดท้าย int num = 20; จุดสุดยอดส่วนตัว vertexList []; // node array ส่วนตัว int adjmat [] []; // node matrix กราฟ () {vertexList = จุดสุดยอดใหม่ [num]; adjmat = new int [num] [num]; nverts = 0; สำหรับ (int i = 0; i <num; i ++) {สำหรับ (int j = 0; j <num; j ++) adjmat [i] [j] = 0; จุดสุดยอด (lab);} // เพิ่มขอบระหว่างสองโหนดโมฆะสาธารณะเพิ่ม (int start, int end) {adjmat [start] [end] = 1; adjmat [end] [start] = 1;} // เอาท์พุทโหนด public displayertex (int v) getAdjunvisitedvertex (int v) {สำหรับ (int j = 0; j <nverts; j ++) {ถ้า (adjmat [v] [j] == 1 && vertexlist [j] .wasvisited == เท็จ) return j; dfs () {vertexlist [0] .wasvisited = true; displayvertex (0); thestack = ใหม่ stackx (); thestack.push (0); ในขณะที่ (! thestack.isempty ()) {int v = getadjunvisitedvertex (thestack.peak ()); ถ้า (v ==-1) // ถ้าโหนดไม่มีอยู่ thestack.pop (); else {vertexlist [v] .wasvisited = true; displayvertex (v); thestack.push (v);}} สำหรับ (int j = 0; j <nverts; j ++) vertexlist [j] .wasvisited = false;}} คลาสสาธารณะ GraphConnect {โมฆะสาธารณะคง thegraph.addvertex ('a'); thegraph.addvertex ('B'); thegraph.addvertex ('C'); thegraph.addvertex ('d'); thegraph.addvertex ('e'); thegraph.addedge (0, 1); // ab thegraph.addedge (1, 2); // bc thegraph.addedge (0, 3); // ad thegraph.addedge (3, 4); // de thegraph.addedge (2, 4); เยี่ยมชม: "); thegraph.dfs (); system.out.println ();}}} ผลลัพธ์ของการรันโปรแกรม:
คำสั่งซื้อเยี่ยม: abced
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของรหัสการทำงานและรหัสการทำงานของ DFS ของการเขียนโปรแกรม Java โครงสร้างกราฟที่ไม่ได้กำกับ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงเว็บไซต์นี้ต่อไปได้:
Java Programming ใช้การค้นหาที่ลึกลงไปในกราฟและการค้นหาที่สมบูรณ์แบบเป็นครั้งแรก
ตัวอย่างรหัสการใช้งาน Java ที่ลึกและกว้างเป็นครั้งแรก
รหัสการแปลงการเขียนโปรแกรม Java สำหรับโครงสร้างเมนูต้นไม้สองตัว
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!