สวัสดีครับผู้อ่านทุกท่าน! หากคุณเป็นผู้ที่หลงใหลในการเขียนโค้ดและสนใจในการเรียนรู้แนวคิดของการสร้างกราฟ (Graph) ด้วยตัวเองโดยไม่ใช้ library แล้วล่ะก็ คุณมาถูกที่แล้วครับ! ในบทความนี้เราจะมาพูดถึงการใช้ matrix ในการแทน adjacency matrix สำหรับการสร้าง undirected graph ในภาษา Rust กันครับ!
Adjacency matrix เป็นการเก็บข้อมูลของกราฟที่ใช้ตารางสองมิติเพื่อแสดงความสัมพันธ์ระหว่างจุด (vertex) นั้นๆ ในกราฟของเรา โดยที่แต่ละแถวและคอลัมน์แทนจุดต่างๆ บนกราฟ หากมีการเชื่อมต่อกัน (edge) ระหว่างจุดสองจุด เราจะใส่ค่า 1 หรือค่าน้ำหนักของเส้นเชื่อมนั้น หากไม่มีการเชื่อมกันก็ใส่เป็น 0 ครับ
สำหรับ undirected graph หรือกราฟที่ไม่มีทิศทางนั้น การเชื่อมต่อระหว่างจุดที่ A ไปหาจุดที่ B จะเท่ากับการเชื่อมต่อจากจุดที่ B ไปหาจุดที่ A นั่นหมายความว่า matrix ของเราจะสะท้อนกันภายใต้ diagonal เป็นหลักครับ
แบบที่ 1: การประกาศกราฟที่มี 4 จุดและเชื่อมต่อกันแบบง่ายๆ
ในโค้ดนี้จะสร้างกราฟที่มี 4 จุด (vertex) เชื่อมต่อกันโดยไม่มีทิศทางและแสดงผลลัพธ์ออกมาบน console ครับ
แบบที่ 2: การ implement ฟังก์ชันเพื่อเพิ่มเส้นเชื่อม (edges) เข้าในกราฟ
ในแบบที่สองนี้ เราได้สร้างฟังก์ชัน `add_edge` เพื่อทำการเพิ่มเส้นเชื่อมระหว่างจุดต่างๆ ในกราฟของเรา ซึ่งทำให้การเขียนโค้ดสะอาดและง่ายต่อการจัดการมากขึ้นครับ
แบบที่ 3: การสร้าง struct เพื่อจัดการกราฟ
โค้ดนี้ยกระดับขึ้นมาอีกขั้นโดยการเปลี่ยนให้การจัดการข้อมูลกราฟเป็นกราฟแบบ object-oriented ที่สวยงามและง่ายดายในการจัดการ ผ่านการใช้ struct และ impl ครับ
1. การเชื่อมสัญญาณเครือข่าย (Network topology)
2. การหาเส้นทางสั้นที่สุด (Shortest path finding) เช่น GPS หรือ Google Maps
3. การวิเคราะห์ความสัมพันธ์ในโซเชียลเน็ตเวิร์ก (Social network analysis)
4. การวางแผนในการทำงานของหุ่นยนต์ (Robot motion planning)
การเข้าใจในการสร้างและการจัดการกราฟเป็นทักษะที่สำคัญในโลกการเขียนโปรแกรม ไม่เพียงแต่เพื่อการใช้งานในงานวิจัย เกมส์ หรือโปรแกรมกราฟิก แต่ยังมีความสำคัญในหลายๆ แอปพลิเคชั่นที่เราใช้ในชีวิตประจำวันด้วยครับ
เพื่อทำความเข้าใจอย่างลึกซึ้งยิ่งขึ้น ขอเชิญชวนนักเรียนทุกคนที่มีความสนใจในการเรียนรู้และพัฒนาทักษะการโปรแกรมมิ่งมาร่วมเรียนกับเราที่ EPT ที่นี่คุณจะได้รับคำแนะนำจากผู้เชี่ยวชาญและประสบการณ์การเรียนรู้ที่ไม่เหมือนใคร โดยเรามุ่งเน้นในการให้ความรู้ที่สามารถนำไปใช้กับปัญหาจริงในโลกการทำงาน พร้อมตอบโจทย์ทั้งในด้านทฤษฎีและปฏิบัติ รอรับคุณอยู่นะครับ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM