Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

การตรวจสอบการเชื่อมต่อในกราฟมีทิศทาง (Connectivity in Directed Graph)


บทนำ

เพื่อตรวจสอบว่ากราฟเชื่อมต่อ (Connected) หรือไม่ จะท่องทุกโหนดด้วยอัลกอริทึมท่องกราฟ หลังท่องเสร็จ หากยังมีโหนดที่ไม่ถูกเยี่ยมชม แสดงว่ากราฟไม่เชื่อมต่อ

สำหรับกราฟมีทิศทาง (Directed Graph) ต้องเริ่มท่องจากทุกโหนด เพราะบางโหนดอาจมี Edge ออกไปอย่างเดียว ไม่มี Edge เข้า ทำให้ไม่ถูกเยี่ยมชมจากจุดเริ่มต้นอื่น

ใช้ Recursive DFS Traversal

อินพุตและเอาต์พุต

Input: เมทริกซ์ติดกัน 5x5
Output: The Graph is connected.

อัลกอริทึม

traverse(u, visited)

Input: โหนดเริ่มต้น u, อาร์เรย์ visited
Output: ท่องโหนดที่เชื่อมต่อทั้งหมด

Begin
    mark u visited
    for โหนด v ที่ติดกับ u do
        if v ไม่ visited then traverse(v, visited)
    done
End

isConnected(graph)

Input: กราฟ
Output: True ถ้ากราฟเชื่อมต่อ

Begin
    กำหนด visited array
    for โหนด u ทุกตัวในกราฟ do
        ล้าง visited เป็น unvisited
        traverse(u, visited)
        if มีโหนด unvisited เหลืออยู่ return false
    done
    return true
End

ตัวอย่างโค้ด (C++)

#include<iostream>
#define NODE 5
using namespace std;

int graph[NODE][NODE] = {
    {0, 1, 0, 0, 0},
    {0, 0, 1, 0, 0},
    {0, 0, 0, 1, 1},
    {1, 0, 0, 0, 0},
    {0, 1, 0, 0, 0}
};

void traverse(int u, bool visited[]) {
    visited[u] = true;
    for(int v = 0; v

ผลลัพธ์

The Graph is connected.